2009-09-10 320 views
2

我有一個.NET程序集(3.5框架),它基本上有一套自定義控件,它可以做很多事情,比如繪製點和類似的東西。該程序集編譯爲'AnyCPU',以便我可以在32位和64位中使用它。當我試圖比較使用32位和64位這個程序集的應用程序的性能時,我看到了有趣的結果。應用程序的性能有兩個部分:一個是進行大量計算和數據複製的後端。另一個是控件上的實際繪圖部分。根據結果​​,第一部分似乎在32位速度更快,而第二部分在64位體系結構中速度更快。誰能解釋這種行爲?數據計算和複製部分在64位比較慢,是因爲浮點算法在64位上比32位慢?32位和64位性能

PS:我在64位AMD機器上使用8GB ram進行了基準測試,其中安裝了32位和64位Vista。

回答

3

如果您的計算部分中有很多對象引用,則每個引用在64位CLR中佔用的空間會增加兩倍,從而導致內存使用量增加,從而導致垃圾回收。這是我能想到的主要區別,但它們也有不同的JIT - 可能是應用程序的計算部分發生了以在32位版本更好的JIT中命中位。