2013-03-18 38 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