FindAsync很慢,但延迟加载很快

时间:2016-02-09 12:37:07

标签: c# sql-server performance entity-framework async-await

在我的代码中,我曾经使用var myRequire = require.context( "./template", // search inside this directory false, // false excludes sub-directories /\.jade$/ // use this regex to filter files ); var table = myRequire("./table.jade"); 加载相关实体,希望我更符合c#异步指南。

await FindAsync

它运行缓慢,在sql server profiler中速度很慢,查询文本在SSMS中很快。花了5秒钟才拿到这条线。

替代方案:

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

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

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

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

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

var activeTemplate = exec.Form.ActiveTemplate;

1 个答案:

答案 0 :(得分:5)

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

你可以找到 rducom 的答案来解释异步方法问题here