gpt4 book ai didi

performance - Entity Framework SaveChanges() 第一次调用很慢

转载 作者:行者123 更新时间:2023-12-04 06:22:16 26 4
gpt4 key购买 nike

我很感激这个问题之前已经提出过几次,但我找不到明确的答案(也许没有!)。

无论如何,标题真的说明了一切。创建一个新上下文,添加一个新实体,SaveChanges() 需要 20 秒。在同一上下文中添加第二个实体,SaveChanges() 即时。

对此有何想法? :-)

============ 更新 ==============

我创建了一个针对我现有模型运行的非常简单的应用程序来显示问题......

    public void Go()
{
ModelContainer context = new ModelContainer(DbHelper.GenerateConnectionString());

for (int i = 1; i <= 5; i++)
{
DateTime start = DateTime.Now;
Order order = context.Orders.Single(c => c.Reference == "AA05056");
DateTime end = DateTime.Now;
double millisecs = (end - start).TotalMilliseconds;
Console.WriteLine("Query " + i + " = " + millisecs + "ms (" + millisecs / 1000 + "s)");

start = DateTime.Now;
order.Note = start.ToLongTimeString();
context.SaveChanges();
end = DateTime.Now;
millisecs = (end - start).TotalMilliseconds;
Console.WriteLine("SaveChanges " + i + " = " + millisecs + "ms (" + millisecs / 1000 + "s)");

Thread.Sleep(1000);
}

Console.ReadKey();
}

请不要评论我的代码——除非它是一个无效的测试;)

结果是:

查询 1 = 3999.2288ms (3.9992288s)
SaveChanges 1 = 3391.194ms (3.391194s)

查询 2 = 18.001ms (0.018001s)
SaveChanges 2 = 4.0002ms (0.0040002s)

查询 3 = 14.0008ms (0.0140008s)
SaveChanges 3 = 3.0002ms (0.0030002s)

查询 4 ​​= 13.0008ms (0.0130008s)
SaveChanges 4 = 3.0002ms (0.0030002s)

查询 5 = 10.0005ms (0.0100005s)
SaveChanges 5 = 3.0002ms (0.0030002s)

第一个查询需要时间,我认为是 View 生成?还是数据库连接?

第一次保存需要将近 4 秒,对于我的应用程序中更复杂的保存需要超过 20 秒,这是 Not Acceptable 。

现在不知道该去哪里:-(

更新...

SQL Profiler 显示第一次查询和更新速度很快,第一次没有什么不同。所以我知道延迟是 Entity Framework 所怀疑的。

最佳答案

它可能不是 SaveChanges 调用 - 第一次调用 EF 中的数据库时,它必须从元数据中生成一些初始代码。您可以在编译时预先生成它:http://msdn.microsoft.com/en-us/library/bb896240.aspx

如果这是唯一的问题,我会感到惊讶,但这可能会有所帮助。

也看看这里:http://msdn.microsoft.com/en-us/library/cc853327.aspx

关于performance - Entity Framework SaveChanges() 第一次调用很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com