打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel 讨论:字典的引用快,还是使用createobject快?

加速对象引用

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

  • ActiveX 部件是作为进程内的服务器,还是作为进程外的服务器来实现的。

  • 对象引用是事前绑定的还是后期绑定的。

一般说来,如果一个部件已作为可执行文件(.exe 文件)的一部分被实现,那么它是一个进程外的服务器,且在其自己的进程中运行。如果它作为一个动态链接库被实现,那么它是一个进程内的服务器,而且在和客户端应用程序同一进程中运行。

使用进程内的服务器的应用程序比使用进程外的服务器的应用程序,运行速度要快些,因为应用程序不需要跨越过程的边界去使用对象的属性、方法和事件。关于进程内的服务器与进程外的服务器的更详细的信息,请参阅“进程内的服务器与进程外的服务器”一节。

如果对象引用使用的对象变量被声明为一个特定类的变量,则对象引用是事前绑定。如果对象引用使用的对象变量被声明为一个一般的 Object 类的变量,则对象引用是后期绑定。通常,使用事前绑定变量的对象引用比使用后期绑定变量,运行得快些。

例如,可以将对于 Excel 对象的引用赋予下列变量中的任意一个:

Dim xlApp1 As Excel.ApplicationSet xlApp1 = New Excel.ApplicationDim xlApp2 As ObjectSet xlApp2 = CreateObject("Excel.Application")

使用变量 xlAppl 的代码是事前绑定,它比使用后期绑定变量 xlApp2 的代码执行的更快。

后期绑定

当声明一个变量 As Object,Visual Basic 在编译期间不能决定该变量含有的对象引用是什么性质的。在这种情况下,Visual Basic 必须使用后期绑定— 即 Visual Basic 必须在运行期间才能决定,对象是否实际上具有代码中要使用的属性和方法。

例如,即便 Visual Basic 引用并不存在的方法,它也会不出错误地编译下列代码,这是因为它使用了后期绑定对象变量。直至运行时之前,它并不检查方法的存在性,所以将产生运行时错误。

Dim xlApp As ObjectSet xlApp = CreateObject("Excel.Application")xlApp.TheImpossibleMethod   ' Method doesn't exist.

这个代码比使用事前连结对象变量的代码运行得要慢些,因为 Visual Basic 在编译好的可执行代码中,还必须含有一段代码,它在运行时决定 Microsoft Excel Application 对象是否具有 TheImpossibleMethod 方法。

虽然后期绑定是调用对象的属性和方法的一种最慢的方法,但有时它又是必要的。例如,有时可能需要写这样一个函数,它用一个对象变量作用于若干不同类型对象的任一个。因为,在事先并不知道什么类的对象会赋给这个变量,所以要使用 As Object 声明它是后期绑定的变量。

事前绑定

如果 Visual Basic 在编译期间可以检测属性或方法属于什么对象,那么引用对象的问题在编译期间就能解决。编译好的可执行的代码仅包含引用对象的属性、方法和事件的代码。这被称为事前绑定

当使用定义对象的类声明对象变量时,该变量可仅包含对那个类的对象的引用。对使用该变量的任何代码,Visual Basic 都可使用事前绑定。

事前绑定极大地减少了设置或恢复属性值所需的时间,因为调用的开销会占据总时间的大部分。对于方法的调用,这种改善的程度取决于所调用的方法的工作量。短的方法,因为调用的开销可以与完成该任务所需的时间相比拟,所以收效最大。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VBA-CreateObject 函数
VB中CreateObject函数用法
CreateObject 函数
C#操作Excel_Excel对象
类,对象和实例的浅显理解 - 『Excel在线学习与辅导』 - Excel精英培训网 - ...
vb调用excel对象的使用实例:使用excel.application与workbook等并保存工作薄
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服