使用64位系统显式选项

时间:2012-12-19 21:07:57

标签: vb.net 64-bit

我有一个64位系统。我将我的变量声明为64位变量,期望我的代码运行得更快。当我执行诸如'String.IndexOf(“J”,X)'之类的函数时,它会失败,因为X是Long但是它正在寻找32位值作为起始索引。

有没有办法传递64位变量而不将其转换为32位?

1 个答案:

答案 0 :(得分:3)

你对64位代码有错误的想法。 String.IndexOf()方法的参数不会更改,第二个参数仍然是Integer。 .NET中唯一改变大小的类型是IntPtr。

这完全是设计上的。当您让它操作64位整数值时,64位处理器执行代码更快。恰恰相反,它使它运行更慢。处理器速度在很大程度上受到缓存大小的限制。 CPU高速缓存很重要,因为它们有助于避免处理器必须从RAM读取或写入数据。与处理器的速度相比,这是非常慢的。在L1,L2或L3高速缓存中没有数据的最坏情况处理器停顿可以是200个周期。

缓存大小是固定的。使用64位变量使缓存一半有效。

使用Long和Option Strict Off也可以减慢代码速度。这需要编译器发出转换以将Long强制转换为整数。它在您的代码中不可见,但肯定会执行,当您使用ildasm.exe或ILSpy或Reflector等反编译器查看IL时,您可以看到它。