【发布时间】:2019-02-18 22:15:41
【问题描述】:
我正在使用 DevExpress,在服务器端我有以下内容:
var fileStreamResult = FileManagerExtension.DownloadFiles(settings, provider, FileManagerFileDownloadingEventHandler);
提供者是 AzureProvider。设置如下:
settings.SettingsEditing.AllowDownload = true;
settings.Settings.AllowedFileExtensions = new[] {".avi", ".mov"};
现在,如果我下载一个大约 30 MB 的文件,它可以正常工作,但是当我尝试使用一个 200 MB 的文件时,.DownloadFiles 返回 null。
此外,当我查看我看到的第一次机会异常时:
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.at System.IO.MemoryStream.set_Capacity(Int32 value)
我不知道问题出在哪里,但我还在我的配置文件中设置了以下内容:
<requestFiltering>
<requestLimits maxAllowedContentLength="30000000" />
</requestFiltering>
我使用上述值添加了额外的零,但仍然没有运气。
有人有什么想法吗?谢谢。
编辑:请注意上传 200MB 即可。下载时出现问题
【问题讨论】:
-
谢谢@niks,但我的问题是下载。上传 200 MB 就可以了。
-
异常可能意味着以下两种情况之一:当 MemoryStream 尝试分配内存时(我假设它想要分配与文件大小一样多的内存,在本例中为 200MB),要么没有足够的空闲内存,或者大对象堆太碎片化,运行时无法找到所需大小的连续空闲内存空间。由您决定到底是什么原因:分析您的程序,在任务管理器中查看程序的内存消耗,在尝试下载之前尝试对大型对象堆进行碎片整理/压缩,等等......
-
@elgonzo,感谢您的建议。我尝试了 GCLargeObjectHeapCompactionMode.CompactOnce,然后进行了收集并得到了相同的结果。内存方面,我有 32GB RAM。
-
你安装了多少内存根本不相关。有多少 RAM 是免费/可用很重要...
标签: c# .net devexpress devexpress-mvc