ASP.Net应用程序是否有内存限制?

时间:2009-02-08 15:23:36

标签: asp.net large-files out-of-memory swfupload

我有一个ASP.Net MVC应用程序,允许用户上传图像。当我尝试上传一个非常大的文件(400MB)时,我收到了一个错误。

我认为我的图像处理代码(家庭酿造)效率非常低,因此我决定尝试使用第三方库来处理图像处理部件。

因为我正在使用TDD,所以我想先写一个失败的测试。但是当我使用相同的大文件测试控制器动作时,它能够毫无困难地完成所有图像处理。

我得到的错误是“内存不足”。

我确信我的代码可能使用的内存比它需要的多得多,但我只是想知道为什么我的测试通过了。

另一个区别是我使用的SWFUpload不用于测试。这可能是原因吗?

5 个答案:

答案 0 :(得分:4)

可以在web.config或machine.config中配置内存限制,或两者都配置。

在web.config中,该部分为:

<httpRuntime 
executionTimeout="3600" 
maxRequestLength="102400"
/>

在machine.config中,该部分也可以是httpRunTime部分,类似于:

<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>

使用processModel部分,aspnet进程也可以限制为总内存的百分比,请参阅:

http://msdn.microsoft.com/en-us/library/7w2sway1.aspx

我遇到过这些设置引起的类似问题。
特别是ProcessModel memorylimit属性。

答案 1 :(得分:1)

上传大小确实没有硬性限制。但是,如果您使用的是32位进程,则可能会受到asp.net工作进程可以解决的内存量的限制。一旦它达到800mb左右,就会变得非常不稳定。

Bravax提到的超时设置也是一个值得检查的好地方。

欢呼使用TDD!

答案 2 :(得分:1)

来自MSDN

  

防止拒绝服务攻击的一种方法是使用FileUpload控件限制可以上载的文件的大小。您应该设置适合您希望上载的文件类型的大小限制。默认大小限制为4096千字节(KB)或4兆字节(MB)。您可以通过设置httpRuntime元素的maxRequestLength属性来允许上载更大的文件。要增加整个应用程序的最大允许文件大小,请在Web.config文件中设置maxRequestLength属性。要增加指定页面的最大允许文件大小,请在Web.config中的location元素内设置maxRequestLength属性。有关示例,请参阅location元素(ASP.NET设置架构)。

     

上传大文件时,用户可能还会收到以下错误消息:

     

aspnet_wp.exe(PID:1520)被回收,因为内存消耗超过460 MB(可用RAM的60%)。

     

如果您的用户遇到此错误消息,请在应用程序的Web.config文件的processModel元素中增加memoryLimit属性的值。 memoryLimit属性指定工作进程可以使用的最大内存量。如果工作进程超过memoryLimit量,则会创建一个新进程来替换它,并将所有当前请求重新分配给新进程。

答案 3 :(得分:0)

异常究竟来自何处?

AFAIK ASP.net/.Net中的图像尺寸没有400MB级别的限制。我正在编写一个项目,其中一些文件要大得多。当然,可能会有一些我不知道的更高限制,但它看起来很奇怪和随意。

你在64位机器上运行吗?您的图像文件可以 - 未压缩(jpg中是400MB吗?) - 测试进程地址空间的2GB限制?

答案 4 :(得分:0)

您需要确保将输入流中的数据传输到某种形式的文件流中,以便内存中不需要整个请求实体。