2013-03-18 107 views
2

當我使用我的一個庫時,我發現了一些奇怪的東西!我有一個類庫負責讀取特定的文件類型。它的工作很好。AnyCpu和x86之間執行時間差異很大

我在這個類庫項目中使用了兩個不同項目(WPF & Console)中的類的Read方法。

我發現:使用類庫讀取一個40MB的文件中WPF Application需要17分鐘。但使用Console Application讀取相同的文件需要1min

下面是我在兩個不同的項目中使用的代碼。

DateTime t1 = DateTime.Now;        
var geometris = MyLibrary.Read(fileName); 
TimeSpan dt1 = DateTime.Now - t1;  //dt1: 17min for WPF 
             //dt1: 1min for Console      

我試了一下:我發現Console Application的目標平臺是86和WPF Application的目標平臺值爲anycpu。所以我將WPF的目標平臺更改爲x86並再次運行。這一次,執行時間爲3分鐘(14分鐘快)

問:任何人都知道如何改變目標平臺有這樣的影響力?我仍然不知道爲什麼WPF應用程序。當從我的庫中調用相同的輸入方法時,比控制檯慢2分鐘?

+1

如果您使用[Stopwatch](http://msdn.microsoft.com/zh-cn/library/system.diagnostics.stopwatch.aspx)來測量執行時間,它會更好。您是否在項目的發佈模式或調試模式下構建? – Habib 2013-03-18 06:54:50

+1

Theres在你嘗試過的部分中出現錯誤。也許,你是否將WPF應用程序更改爲x86 plattform? – Jehof 2013-03-18 06:55:45

+0

@Habib其實我使用秒錶,但在這裏我使用了'DateTime',因爲它需要更少的代碼行。我在Debug模式下構建 – 2013-03-18 06:57:54

回答

2

在我的實踐中,x86和x64性能沒有太大的區別。在你的情況下,原因可能是在不同的RAM使用情況;在x64模式下,所有對象引用佔用兩倍的RAM。

+0

謝謝。 WPF和控制檯應用程序之間的2分鐘差異(當兩者都處於x86模式時)呢? – 2013-03-18 07:21:57

+0

@Hossein Narimani Rad,WPF應用程序比控制檯應用程序消耗更多內存。但是這也可能有另一個原因。您需要在更大容量的RAM上測試您的應用程序。 – user626528 2013-03-18 07:29:18

+0

@Hossein Narimani Rad,你也可以嘗試在沒有調試的情況下運行你的程序。 (使用調試器執行可能會導致非常不同的性能) – user626528 2013-03-18 08:36:48