繁体   English   中英

ASP.NET MVC高延迟 - 由于大文件写入,ajax请求和操作调用之间的延迟

[英]ASP.NET MVC High latency - Delay between ajax request and action invocation because of large file write

更新2019-04-24

问题TL; DR一个控制器调用导致接下来的几个调用在它们到达控制器之前有~15s的延迟。

我已经将原因缩小到请求中的大文件写入,导致进一步延迟File.WriteAllText(htmlFilePath, reportHTML);

原帖

问题

我有一个长时间运行的控制器请求来生成报告。 生成报告后,将生成其他http请求以获取结果图像。

但是,对于图像的http调用在浏览器中的ajax调用和调用控制器操作之间需要大约15秒。 之后,该方法快速运行。

到目前为止的证据

以前,我们使用WCF在单独的计算机上运行报告生成,并且没有这样的延迟。 我已经尝试将报告生成和图像检索方法作为异步调用运行在他们自己的线程上(但在同一台机器上)。 但是,仍有延迟。

延迟也仅在生成报告后的第一个图像请求上发生。 之后,没有延迟。

也没有会话状态, 禁用会话状态无效

有谁知道什么可能导致这种延迟? 如何更好地了解ASP.NET代码或IIS进程中的块?

其他详情:

使用CoreHtmlToImage生成报告,使用azure存储模拟器进行图像存储。 ASP.NET MVC是5.2.3版(不是核心版)

事实证明,写入网站的目录会导致网络服务器重新启动网站

来源: 在wwroot文件夹ASP.Net MVC3中创建临时文件

所以如果你使用汇编工作目录来编写文件

var uriAssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
var assemblyPath = new Uri(uriAssemblyPath).LocalPath;
var baseDirectory = System.IO.Path.GetDirectoryName(assemblyPath);

你会遇到这个问题。

如果您需要webroot外部的一致目录,则可以使用指定的临时目录

Path.GetTempPath()

来源: 我在哪里可以从ASP.NET编写临时文件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM