|
实际上,访问 COM 属性或方法的开销并没有那么大。下面举一个例子,说明某相当常见的代码(从语法上讲):
Foo.bar.blah.baz = Foo.bar.blah.qaz(1) If Foo.bar.blah.zaq = Foo.bar.blah.abc Then ' ...
当此代码运行时,下面是发生的情况:
变量 Foo 被解析为全局对象。 变量 bar 被解析为 Foo 的成员。这实际就是一次 COM 方法调用。 变量 blah 被解析为 Foo.bar 的成员。这又是一次 COM 方法调用。 变量 qaz 被解析为 foo.bar.blah 的成员。没有错,这还是一次 COM 方法调用。 调用 Foo.bar.blah.quaz(1)。再一次 COM 方法调用。懂了吗? 再次执行步骤 1 至步骤 3 以解析 baz。系统并不知道调用 qaz 是否改变对象模型,因此必须再次执行步骤 1 至 3 以解析 baz。 将 baz 解析为 Foo.bar.blah 的成员。赋予属性。 再次执行步骤 1 至步骤 3 以解析 zaq。 再次执行步骤 1 至步骤 3 以解析 abc。 正如您可看到的,效率相当差(且慢)。以 VBScript 写此代码的快速方法是:
Set myobj = Foo.bar.blah ' do the resolution of blah ONCE Myobj.baz = myobj.qaz(1) If Myobj.zaq = Myobj.abc Then '...
假如您使用 VBScript 5.0 或更高版本,您可以使用 With 语句写此代码:
With Foo.bar.blah .baz = .qaz(1) If .zaq = .abc Then '... ... End With
注重此技巧也适用于 VB 程序设计。 技巧 13:避免重新确定数组的维数 应尽量避免 Redim 数组。就性能而言,假如计算机的物理内存大小有限,最好将数组的初始维数设置为其最不利的情况 - 或将维数设置为其最佳的情况,然后再按需要重新确定维数。这并非意味着,假如知道您不需要内存时,就随便分配几兆字节的内存。
下面的代码给您显示使用 Dim 和 Redim 不当的情形。
<% Dim MyArray() Redim MyArray(2) MyArray(0) = “hello” MyArray(1) = “good-bye” MyArray(2) = “farewell” ... ' some other code where you end up needing more space happens, then ... Redim Preserve MyArray(5) MyArray(3) = “more stuff” MyArray(4) = “even more stuff” MyArray(5) = “yet more stuff” %>
最好一开始就将数组的初始大小 Dim 正确(在本例中,是 5)比 Redim 数组使其更大好得多。您可能浪费一些内存(假如您没有使用所有的元素),但获得的好处是速度变得更快。
|
| 共9页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 9 下一页 |
评论加载中…