C# AnyCpu和x86之间的执行时间差异很大
当我使用我的一个图书馆时,我发现了一些奇怪的东西!我有一个类库,负责读取特定的文件类型。而且它的工作做得很好 我在两个不同的项目(WPF和Console)中使用了类库项目中一个类的C# AnyCpu和x86之间的执行时间差异很大,c#,wpf,benchmarking,execution-time,target-platform,C#,Wpf,Benchmarking,Execution Time,Target Platform,当我使用我的一个图书馆时,我发现了一些奇怪的东西!我有一个类库,负责读取特定的文件类型。而且它的工作做得很好 我在两个不同的项目(WPF和Console)中使用了类库项目中一个类的Read方法 我的发现:使用类库在WPF应用程序中读取40MB文件需要17分钟。但是使用控制台应用程序读取同一文件需要1分钟 下面是我在两个不同项目中使用的相同代码 DateTime t1 = DateTime.Now; var geometris = MyLi
Read
方法
我的发现:使用类库在WPF应用程序中读取40MB文件需要17分钟。但是使用控制台应用程序读取同一文件需要1分钟
下面是我在两个不同项目中使用的相同代码
DateTime t1 = DateTime.Now;
var geometris = MyLibrary.Read(fileName);
TimeSpan dt1 = DateTime.Now - t1; //dt1: 17min for WPF
//dt1: 1min for Console
我尝试的:我发现控制台应用程序的平台目标是x86,WPF应用程序的目标平台是AnyCpu。因此,我将WPF
的目标平台更改为x86并再次运行它。这次执行时间3分钟(快14分钟)
问题:有人知道改变目标平台会产生怎样的影响吗?我仍然不知道为什么WPF应用程序。使用库中的相同输入调用相同方法时,是否比控制台慢2分钟?在我的实践中,x86和x64的性能没有太大差异。在您的情况下,原因可能是不同的RAM使用;在x64模式下,所有对象引用占用两倍的RAM。如果用于测量执行时间,效果会更好。您是在项目的发布模式还是调试模式下构建的?您的我尝试的部分中有错误。您是否将WPF应用程序更改为x86平台格式?@Habib实际上我使用了秒表,但在这里我使用了DateTime
,因为它需要更少的代码行。我正在调试中构建mode@HosseinNarimaniRad,在发布模式下构建,然后查看是否获得difference@Habib我去查一下……谢谢。WPF和控制台应用程序(当两者都处于x86模式时)之间有2分钟的差异吗?@Hossein Narimani Rad,WPF应用程序比控制台应用程序消耗更多的内存。但这可能还有另一个原因。你需要在另一台内存更大的电脑上测试你的应用程序。@Hossein Narimani Rad,你也可以尝试在不调试的情况下运行你的程序。(使用调试器执行可能会导致非常不同的性能)