我有一个.NET程序集(3.5框架),它基本上有一组自定义控件,可以执行许多操作,比如绘制点和类似的东西。程序集编译为'AnyCPU',以便我可以在32位和64位中使用它。当我尝试比较在32位和64位使用此程序集的应用程序的性能时,我看到了有趣的结果。应用程序性能有两个部分:一个是后端,它进行了大量的计算和数据复制。另一个是控件上的实际绘图部分。根据结果,似乎第一部分在32位更快,而第二部分在64位架构中更快。谁能解释这种行为? 64位的数据计算和复制部分较慢是因为64位的浮点运算比32位慢?
PS:我在64位AMD机器上对8GB内存进行了基准测试,并在其上安装了32位和64位Vista。
答案 0 :(得分:3)
如果在计算部分中有很多对象引用,则每个引用将占用64位CLR的两倍空间,从而导致内存使用量增加,从而导致垃圾回收。这是我能想到的主要区别,但它们也有不同的JIT - 可能是你的应用程序的计算部分发生来点击32位版本更好的JIT位。