问题TL; DR一个控制器调用导致接下来的几个调用到达控制器之前有大约15s的延迟。
我将原因缩小为请求中写入大文件,从而导致进一步延迟File.WriteAllText(htmlFilePath, reportHTML);
我有一个运行时间很长的控制器请求,用于生成报告。生成报告后,还会发出其他http请求以获取生成的图像。
但是,对图像的http调用在浏览器中的ajax调用与调用控制器动作之间大约需要15秒钟的时间。之后,该方法将快速运行。
以前,我们使用WCF在另一台计算机上运行报告生成,并且没有这种延迟。 我尝试在自己的线程上(但在同一台计算机上)将报告生成和图像检索方法作为异步调用运行。但是,这仍然有延迟。
延迟也仅在生成报告后发生在第一个图像请求上。之后,就没有延迟了。
也没有会话状态,disabling session state也没有作用
有人知道什么可能导致此延迟吗?如何才能更好地了解ASP.NET代码或IIS进程中的块?
使用CoreHtmlToImage生成报告,并使用Azure存储模拟器存储图像。 ASP.NET MVC是版本5.2.3(不是核心)
答案 0 :(得分:0)
事实证明,写入网站目录会导致网络服务器重新启动网站
来源:Creating temporary files in wwroot folder ASP.Net MVC3
因此,如果您使用程序集工作目录(例如,
var uriAssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
var assemblyPath = new Uri(uriAssemblyPath).LocalPath;
var baseDirectory = System.IO.Path.GetDirectoryName(assemblyPath);
您会遇到这个问题。
如果您需要在Webroot之外的目录,则可以使用指定的temp目录
Path.GetTempPath()