ASP.NET文件上载会停止网站上的所有其他请求

时间:2011-09-09 17:16:51

标签: asp.net performance file-upload

我们有一个门户网站,其中有一个页面,允许用户一次最多上传5个文件。该页面只有5个标准的ASP.NET FileUpload控件。

问题是,我们看到当用户上传文件时,它会使网站上的所有其他活动停止。在上传过程的1-2分钟内,我们看到请求开始排队并请求吞吐量降至零。文件完成上传后,一切都会恢复。 (我们正在使用New Relic向我们展示正在发生的事情)

我们没有处理常用功能,上传的文件也不大。但是,我们已经看到每个上传大约70kb的4个文件会导致这种情况。

有些调查让我this blog post。不幸的是,他们碰巧销售的产品需要Server 2008和IIS7,客户端有2003和IIS6。此外,似乎4个微小的上传应该没有这种影响。

那么,是否还有其他人遇到过这种情况,或者知道为了在如此小的范围内造成这个问题本来可以做错的事情?也许有不正确的应用程序池或web.config设置我们应该关注那会限制吞吐量?

5 个答案:

答案 0 :(得分:1)

尝试使用委托进行异步上传。这可能有所帮助。

答案 1 :(得分:0)

为什么不尝试将上传控件放在更新面板中?我认为这将分别处理上传请求。 如果有效,请告诉我。

答案 2 :(得分:0)

如果你说网站上的所有其他活动都停止了,那么结果只会出现在正在进行上传的客户端上(编辑:我看到你在评论中另有说明),如果你不需要在上传过程中将数据写入Session,解决方案很简单:更改接受上传的page / handler / WebMethod,使其无法写入Session,如下所示。

  • 对于某个页面,请添加EnableSessionState="false"EnableSessionState="ReadOnly"指令@ Page
  • 对于通用处理程序,请删除 来自类声明的IRequiresSessionState,或将其替换为IReadOnlySessionState
  • 对于WebMethod,请使用EnableSession property of the WebMethod attribute[System.Web.Services.WebMethod(EnableSession=false)]

答案 3 :(得分:0)

如果使用asp fileupload服务器控件,请将此代码添加到web.config

<httpRuntime
executionTimeout="110"
maxRequestLength="4096"
requestLengthDiskThreshold="80"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="5000"
enableKernelOutputCache="true"
enableVersionHeader="true"
requireRootedSaveAsPath="true"
enable="true"
shutdownTimeout="90"
delayNotificationTimeout="5"
waitChangeNotification="0"
maxWaitChangeNotification="0"
enableHeaderChecking="true"
sendCacheControlHeader="true"
apartmentThreading="false" />`

只需更改executionTimeout="110" maxRequestLength="4096"

即可

答案 4 :(得分:0)

  1. http://www.uploadify.com/
    • 允许您上传单个或多个文件。每个文件都将发送到 - &gt;
  2. - &GT; 2. Web通用处理程序 - 在这里你可以检查尺寸,扩展名,存放地点等......

    1. 上传完成后,回复一些msg / do actions。
    2. 这种结构与您的网站速度无关......就像他将这些文件上传到其他页面一样。同样好的想法是,多个文件逐个上传..