C# x64 CLR的好处

C# x64 CLR的好处,c#,.net,64-bit,clr,native,C#,.net,64 Bit,Clr,Native,我头脑中的一个小小的过早优化错误告诉我,我应该将现有的x86 C#应用程序移植到x64,因为x64发布了它所依赖的非托管DLL。我知道答案可能是这样做,测试并看看会发生什么,但我想看看通常预期的好处是什么。我发现两到四年前有很多帖子抱怨x64 CLR的速度比x86 CLR慢 使用x64代码可以在哪些方面加速?除了需要超过2GB的内存外,是否值得移植?我的代码主要是面向网络的,处理中等大小的字节数组和加密算法。这个问题最简单的答案是分析32位和64位并比较它们。然而,既然你说你正在使用加密算法,我

我头脑中的一个小小的过早优化错误告诉我,我应该将现有的x86 C#应用程序移植到x64,因为x64发布了它所依赖的非托管DLL。我知道答案可能是这样做,测试并看看会发生什么,但我想看看通常预期的好处是什么。我发现两到四年前有很多帖子抱怨x64 CLR的速度比x86 CLR慢


使用x64代码可以在哪些方面加速?除了需要超过2GB的内存外,是否值得移植?我的代码主要是面向网络的,处理中等大小的字节数组和加密算法。

这个问题最简单的答案是分析32位和64位并比较它们。然而,既然你说你正在使用加密算法,我强烈建议你考虑使用64位,如果你经常使用的话

加密算法通常对大于32位的值执行整数算术和/或逻辑运算,这在64位代码中要快得多。此外,它们通常可以比普通代码更多地利用处理器的扩展寄存器集(尽管某些超标量/缓存优化可能已经在一定程度上做到了这一点)


最后,除了在您的具体情况下进行测试之外,没有办法判断哪一个性能更好,但是如果您正在使用的任何密码学库都有64位版本,我相信值得一试。

被否决的选民是否愿意解释为什么他们否决了这个问题+1抵消它。FWIW如果在64位操作系统上运行一个32位的大型地址感知应用程序,它实际上会获得整个4 GB的地址空间,因此这是一种让应用程序访问更多内存的简单方法。如果没有具体说明,这个问题很难回答。64位代码通常比32位等效代码慢,而且实际上只有几个原因需要移植,依我看:1)您需要的内存比32位可用的4GB要多,或者2)您的客户端坚持您应该使用64位版本,或者3)您需要与64位系统(例如Office或Windows Explorer扩展)交互。如果你没有明确的需要做端口,不要做;这意味着你有另一个平台来测试和调试。@KenWhite这样做的另一个重要原因是如果有大量的64位整数运算正在进行。在浮点情况下,所有代码(如果在64位处理器上执行)都将使用SSE,但整数算术没有这个优势,将在多个32位指令中实现。@KenWhite:不是这样的。x64代码可以访问更多寄存器,这减少了将非易失性值推送到堆栈的需要,从而节省了大多数函数中的内存访问。它还可以在一个周期内执行int64_t和uint64_t操作,而在x86上则需要20个左右的周期。最后,在Windows中,每个WOW64系统调用都必须进行转换,并进行CPU模式转换和参数转换,如果您的代码是x64操作系统上的x64,则无法进行转换。