我得到了 .net 4.0 和 Entity Framework 4.0 和 Visual Studio 2012 和 Windows 7,64 位架构,4 核。
我正在使用 AdventureWorks 数据库在控制台应用程序上执行一些测试。困扰我的是我第一次服用一些产品比第二次要花更多的时间,我想知道为什么。
我知道实体框架在第一次查询期间执行了一些任务,所以我提前执行了一些额外的查询。
例如,我的主要功能包含以下内容:
using (var context = new Context())
{
execute context.Clients.ToList(); // <- this takes something like 300 ms
}
using (var context = new Context())
{
execute context.Products.ToList(); // <- this takes something like 200 ms
}
using (var context = new Context())
{
execute context.Products.ToList(); // <- this takes something like 10 ms
}
因此,您会看到第一个包含所有“第一次执行”事情的查询需要 300 毫秒。
第二个需要 200s,第三个和第二个一样只需要 10ms。
所以我的问题是:为什么我的第三个查询需要这么短的时间?我不使用自动编译(因为 EF 4.0 中没有此类)或 CompiledQuery 类。
此外,我对 Products 的第一次调用不是对模型的第一次查询,因此视图生成的所有工作都应该已经完成。
但是第一次还是要花很多时间,第二次我打电话给产品时又是如此之快。它是否在某处缓存了某些东西?
我注意到的另一件事是,当我将它编译为 64 位时,它需要很长的时间,比如一秒钟。当我将它编译为 32 位时,它需要我给的数量。
你能在这里给我一些提示吗?
谢谢