gpt4 book ai didi

c# - FindAsync 很慢,但是延迟加载很快

转载 作者:太空狗 更新时间:2023-10-29 23:13:28 26 4
gpt4 key购买 nike

在我的代码中,我曾经使用 await FindAsync 加载相关实体,希望我能更好地符合 c# async 准则。

var activeTemplate = await exec.DbContext
.FormTemplates.FindAsync(exec.Form.ActiveTemplateId);

它运行缓慢,在 sql server profiler 中很慢,在 SSMS 中查询文本很快。获取这一行用了 5 秒。

备选方案:

var activeTemplate = exec.Form.ActiveTemplate;

要快得多。无论如何,问题似乎不是参数嗅探,因为快速查询和慢速查询中的读取次数是相同的。

一个可能不相关的点是,获取的对象包含一个包含 ~1MB 文本的字符串属性。应用程序是asp.net mvc,与sql server运行在同一台计算机上,使用(本地)连接。

观察到的缓慢的原因是什么?

编辑:在@jbl 的评论之后,我做了更多的实验:

var activeTemplate = await exec.DbContext.FormTemplates
.FirstOrDefaultAsync(x => x.Id == exec.Form.ActiveTemplateId); // slow

var activeTemplate = exec.DbContext.FormTemplates
.FirstOrDefault(x => x.Id == exec.Form.ActiveTemplateId); // fast

最佳答案

从服务器(例如 varbinary(MAX)、varchar(MAX)、nvarchar(MAX) 或 XML)读取大型列时,异步方法可能会出现性能问题。

您可以找到 rducom 的答案,它解释了异步方法的问题 here

关于c# - FindAsync 很慢,但是延迟加载很快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292288/

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