Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在32位和64位中使用实体框架的性能差异_Performance_Entity Framework 4_64 Bit_32 Bit - Fatal编程技术网

Performance 在32位和64位中使用实体框架的性能差异

Performance 在32位和64位中使用实体框架的性能差异,performance,entity-framework-4,64-bit,32-bit,Performance,Entity Framework 4,64 Bit,32 Bit,我正在应用程序中使用.NETFramework4.0中的实体框架 在将操作系统升级到64位版本后,我注意到应用程序中的CPU使用率更高 专门为x86编译应用程序(而不是像以前那样编译任何CPU)应用程序的CPU使用率与操作系统升级之前大致相同 我使用下面的代码做了一些更详细的测量 之前运行过一些预热代码,因此不会测量第一次创建上下文和第一次运行查询的开销。这些案例对我的应用程序来说不是很有趣,因为它是一个长期运行的应用程序 var s=Stopwatch.StartNew(); var name

我正在应用程序中使用.NETFramework4.0中的实体框架

在将操作系统升级到64位版本后,我注意到应用程序中的CPU使用率更高

专门为x86编译应用程序(而不是像以前那样编译任何CPU)应用程序的CPU使用率与操作系统升级之前大致相同

我使用下面的代码做了一些更详细的测量

之前运行过一些预热代码,因此不会测量第一次创建上下文和第一次运行查询的开销。这些案例对我的应用程序来说不是很有趣,因为它是一个长期运行的应用程序

var s=Stopwatch.StartNew();
var name=“name”;
对于(变量i=0;i<100000;++i){
使用(var context=new MyDatabaseEntities()){
var entity=context.myenties.FirstOrDefault(e=>e.Name==Name);
}
}
s、 停止();
上面的代码为x86或x64编译(任何CPU都会给出与x64相同的结果),并在Windows7 64位机器上运行。(数据库正在另一台计算机上运行)

以x86s为例,性能差异为12%。也就是说,如果x86版本每秒运行100个查询,那么x64版本每秒运行88个查询

在.NET上,32位和64位之间是否存在预期的/正常的性能差异

我能做些什么来获得与32位版本相同的64位版本性能

在上面的示例中,MyEntity是一个非常简单的实体,具有Id和名称


通常,应用程序作为windows服务运行,但在测量时,它是作为普通windows应用程序(WPF)运行的。

您是否一次又一次地获得相同的实体?你到底想测试什么。实际应用程序的行为往往与您的测试不同。做一个真正的塞纳里奥,你有不同的实体,你会得到其他的结果。只有知道应用程序将如何使用时,才应该测试此功能。使用更多内存的应用程序通常在64位上性能更好。在您的情况下,内存使用率可能较低,因此您可以获得更好的32位性能。

在我的情况下,我使用asp.net和x86,因为内存使用率低于2gb。x64的内存使用率将增加一倍,但您可以分配超过2gb的内存。这里有一个类似的问题:

尝试只比较一次查询运行。在测试过程中,有一个类似的问题与应用程序的不同速度有关:第一次创建实体上下文和第一次运行查询对于我的用例来说并不有趣。我的测试通过在开始测量时间之前运行一些查询来“预热”实体框架来处理这个问题。(我在问题中对此作了澄清)
var s = Stopwatch.StartNew();
var name = "name";
for (var i = 0; i < 100000; ++i) {
    using (var context = new MyDatabaseEntities()) {
        var entity = context.MyEntities.FirstOrDefault(e => e.Name == name);
    }
}
s.Stop();