我有一个 64 位系统。我将我的变量声明为 64 位变量,希望我的代码运行得更快。当我执行诸如 'String.IndexOf("J", X)' 之类的函数时,它会失败,因为 X 是 Long 但它正在寻找 32位值作为起始索引。
有什么方法可以传递 64 位变量而不将其转换为 32 位?
你对 64 位代码有错误的想法。String.IndexOf() 方法的参数不变,第二个参数仍然是一个整数。.NET 中唯一改变大小的类型是 IntPtr。
这完全是设计使然。当您让64 位处理器处理 64 位整数值时,它不会更快地执行代码。恰恰相反,它使它运行得更慢。处理器速度在很大程度上受到缓存大小的限制。CPU 缓存很重要,因为它们有助于避免处理器必须从 RAM 读取或写入数据。与处理器的速度相比,这非常慢。由于 L1、L2 或 L3 高速缓存中没有数据而导致的最坏情况处理器停顿可能是 200 个周期。
缓存大小是固定的。使用 64 位变量可使缓存的效率减半。
您还可以使用 Long 和 Option Strict Off 使代码变慢。这需要编译器发出转换以将 Long 转换为 Integer。它在您的代码中不可见,但它肯定会执行,当您使用 ildasm.exe 或反编译器(如 ILSpy 或 Reflector)查看 IL 时,您可以看到它。