File.ReadAllBytes()抛出OutOfMemoryException

时间:2014-07-29 16:03:13

标签: c# asp.net out-of-memory

我正在将小pdf文件加载到缓冲区并获取OutOfMemoryEception。文件大小220KB工作正常,我测试的下一个大小是4,50MB这个文件抛出异常。什么是最大文件大小,我该怎么做才能更改最大大小? 4,5MB并不多: - )

这是相关代码:

ListViewDataItem dataItem = (ListViewDataItem)e.Item;
int i = dataItem.DisplayIndex;
byte[] buffer = File.ReadAllBytes(Session["pdfFileToSplit"].ToString());
string unique = Guid.NewGuid().ToString();
Session[unique] = buffer;

Panel thumbnailPanel = (Panel)e.Item.FindControl("thumbnails");
Thumbnail thumbnail = new Thumbnail();
thumbnail.SessionKey = unique;
thumbnail.Index = i+1;
thumbnail.DPI = 17;
thumbnail.BorderColor = System.Drawing.Color.Blue;
thumbnailPanel.Controls.Add(thumbnail);

好的,我刚看到一些非常神秘的东西(对我来说)。我上传了一个10MB以下的文件,这是IIS服务器的使用内存(w3wp.exe),没有任何戏剧性的事情发生,几MB下来,一些下来,一切正常。比我用12MB文件做过同样的事情。在一开始它看起来是相同的,但突然之间,突然之间,w3wp.exe的已用内存爆炸到1.5GB,比服务器崩溃....

1 个答案:

答案 0 :(得分:1)

OutOfMemoryException是在服务器端还是客户端?

当您使用Session [unique] = buffer时,您将在会话中同时存储所有文件(表示为字节数组)。

这可能是很多信息。

如果您的会话是" InProc",您的服务器可能会耗尽内存。

限制是机器的内存。

当您的请求完成后,内存将在会话中保持分配状态。这就是问题所在。如果这不是所需的行为,则应设置Session [unique] = null,使会话在服务器上配置内存。如果放入10个文件,即使请求完成,也会在会话中同时存储10个文件。它们将仅在会话结束时处理。