【发布时间】:2023-03-29 16:40:01
【问题描述】:
我获得了 .net 4.0 和 Entity Framework 4.0 以及 Visual Studio 2012 和 Windows 7、64 位架构、4 核。
我正在使用 AdventureWorks 数据库在控制台应用程序上执行一些测试。困扰我的是,我第一次服用一些产品比第二次要花更多的时间,我想知道为什么。
我知道 Entity Framework 在第一次查询期间会执行一些任务,所以我提前执行了一些额外的查询。
例如,我的 main 函数包含以下内容:
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 的第一次调用并不是对模型的第一次查询,因此视图生成的所有工作都应该已经完成。
但是第一次调用产品仍然需要很长时间,而第二次调用 Products 时又是如此之快。它会在某处缓存一些东西吗?
我注意到的另一件事是,当我将它编译为 64 位时,它会花费非常多的时间,大概是一秒钟。当我将它编译为 32 位时,它需要我给的数量。
你能给我一些提示吗?
谢谢
【问题讨论】:
标签: entity-framework entity-framework-4