当我上传此文件时,我的文件名就像“c3c81d9e-b390-4622-999c-eb74146afd10.dat”。 我不想改变上传逻辑。此文件大小为1 GB。
我的问题是,当不同的用户同时下载同一个文件时,它会抛出异常 - System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown
。
我的代码如下。(C#)
string path ="E:\Projects\testsite\Inetpub\wwwroot\Downloads";
byte[] FileContents;
FileContents = File.ReadAllBytes(path);
但是它给出了System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常。
我在堆栈溢出时使用了以下解决方案。
Reading large file using byte[] gives error
byte[] hashValue;
SHA1Managed hashString = new SHA1Managed();
using (FileStream f = File.Open(path, FileMode.Open))
{
hashValue = hashString.ComputeHash(f);
foreach (byte x in hashValue)
{
file.HexadecimalValue += String.Format("{0:x2}", x);
}
}
但是这个file.HexadecimalValue
返回带有哈希值的字符串。
如何从file.HexadecimalValue
提取数据并传递给HttpContext.Current.Response
?
什么是最好的解决方案?
提前致谢
答案 0 :(得分:0)
如果您不想更改逻辑,则必须检查两个选项。
这将使您的应用程序能够支持最大2 GB的超大对象。
您可以通过更改配置文件来启用大对象支持,如下所示......
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
可能会解决您的问题。