首页 > 解决方案 > 正确配置以增加 Umbraco 处理内存

问题描述

在处理 1.6GB 等大文件时,我不断收到 SystemOutOfMemoryException。我只是想知道我在 web.config 中的配置是否正确。下面是我为支持大于 1GB 的大文件而修改的代码行

<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" maxRequestLength="457286400" executionTimeout="3600" targetFramework="4.5" fcnMode="Single" />

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="3294967295" />
  </requestFiltering>
</security>

我不确定这是否正确。我还通过工具-> 选项-> 项目和解决方案-> Web 项目-> “使用 65 位版本的 IIS”将 IIS 服务器更改为在 x64 中运行

我不确定我错过了什么,但即使我已经增加了内存大小,我仍然让系统内存不足异常

更新:只要客户需要,我正在处理像 .mp4 文件这样的大文件或任何类型的文件,无论类型如何。

此外,我没有使用前端上传文件。我们所做的是通过 Filezilla 上传大文件,如果文件被上传到服务器,我们使用 Umbraco MediaService 来处理这个文件,以便在媒体页面中有一个条目。我们也在使用 Hangfire 来触发我们的后台服务来处理 MediaService

标签: c#.netiisumbracoumbraco7

解决方案


接受这样的大文件并不是最佳做法。例如,这提供了执行 Ddos 攻击的可能性。此外,您将需要大量内存,因为文件将在内存中处理,然后再将其保存到磁盘,因此存在内存问题。

更好的解决方案是用 javascript 将它们分块并发送小数据包,然后将它们缝合在一起服务器端。关于如何自己构建这个有一个很好的解释:https ://www.dotnetcurry.com/aspnet-mvc/893/upload-big-files-aspnet-mvc-azure-storage (取决于你如何处理你的会话, 将其添加到会话中可能无法解决您的内存问题。我想您需要将其保存到磁盘)

与 memroy 异常无关,但请确保将其包装在 a 中<location path="xxx/yyy"> your web.config stuff </location>,以便只有此 URL 才能接受大文件。


推荐阅读