热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在vba中使用变体对性能有害吗?

如何解决《在vba中使用变体对性能有害吗?》经验,为你挑选了1个好方法。

我想标题非常简单,将变量声明为变体而不是特定数据类型对VBA的性能有何影响?

也许是因为我不熟悉编程,但直觉上它会降低性能,因为计算机必须检查分配了哪种数据类型,然后将变量更改为指定的数据类型,而不是立即将值赋给它.我还没有找到一些关于此的文献.



1> 小智..:

这取决于.变体比原生类型慢,但在大多数程序中,它根本不重要.大多数宏很小并且在运行时会被编译,差异可能是几微秒,你无法察觉.

变体有它们的优点,我喜欢它们.

所以这取决于你在做什么.如果您的程序眨眼间运行,那么避免变体就没有优势.如果需要时间,请强烈键入变量(并正确声明对象 - 请参阅下文).

如果表现是一个问题,除此之外还有其他一些事情,我将在下面提到.

一般问题

设置属性或调用方法时,每个都是CPU中的函数调用.这意味着堆栈设置开销.函数调用比内联代码慢.出于同样的原因,在VBA中使用循环而不是函数.

F或开头不会一遍又一遍地指定所有这些属性.除非你改变它们,否则它们不会改变.

With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = False

    For loop to go through each word pair
        .Text = SrcText
        .Replacement.Text = DestText
        .Find.Execute Replace:=wdReplaceAll
    Next

End With

最小化点

因此,如果您对性能最小化点(每个点是查找)感兴趣,尤其是在循环中.

有两种方法.一种是如果要多次访问,则将对象设置为最低对象.

例如(慢)

set xlapp = CreateObject("Excel.Application")
msgbox xlapp.worksheets(0).name 

(更快,因为每次使用对象时都会忽略一个点)

set xlapp = CreateObject("Excel.Application")
set wsheet = xlapp.worksheets(0)
msgbox wsheet.name

第二种方式是.您一次只能有一个活动的.

这会跳过100次查找.

with wsheet
For x = 1 to 100
 msgbox .name
Next
end with

字符串Concatination

并且不要一次加入一个字符串.从Vbscript程序员那里看到这一点.它需要50,000个字节,并且需要多次分配和释放才能生成100个字符的字符串.

http://blogs.msdn.com/b/ericlippert/archive/2003/10/20/53248.aspx

阅读属性

不要重新读取不会更改的属性,尤其是在进程外或后期绑定时.把它们放入一个变量中.

对象类型

这里有两个概念 - 进程内外或早期或晚期绑定.

exefiles与进程外连接.所有调用都通过RPC(网络协议)进行编组.Dllfiles正在进行中,函数调用直接通过跳转进行.

早期绑定是set x = objecttype.编写程序时会查找函数.在执行时,程序被硬编码以跳转到存储在该函数的vtable中的地址.

设置后期绑定x = createobject("objecttype").每个函数调用都是这样的."嗨对象你有一个打印命令"."是",它回答说,"命令3"."嗨,对象可以请你做3号命令"."当然,这是结果".

从Visual Basic概念(帮助的一部分)

通过优化Visual Basic解析对象引用的方式,可以使Visual Basic应用程序运行得更快.Visual Basic处理对象引用的速度可能受以下因素影响:

ActiveX组件是否已实现为进程内服务器或进程外服务器.

对象引用是早期绑定还是后期绑定.通常,如果组件已作为可执行文件(.exe文件)的一部分实现,则它是进程外服务器并在其自己的进程中运行.如果它已实现为动态链接库,则它是进程内服务器,并在与客户端应用程序相同的进程中运行.

使用进程内服务器的应用程序通常比使用进程外服务器的应用程序运行得更快,因为应用程序不必跨越进程边界来使用对象的属性,方法和事件.有关进程内和进程外服务器的更多信息,请参阅"进程内和进程外服务器".

如果对象引用使用声明为特定类的变量的对象变量,则它们是早期绑定的.如果对象引用使用声明为通用Object类的变量的对象变量,则它们是后期绑定的.使用早期绑定变量的对象引用通常比使用后期绑定变量的对象引用运行得更快.

Excel特定

请参阅Microsoft人员的此链接.这是excel特定而不是VBA.Autocalc和其他计算选项/屏幕更新等

http://blogs.office.com/2009/03/12/excel-vba-performance-coding-best-practices/

.


推荐阅读
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
author-avatar
sa沙沙ssa
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有