使用fileStream时出现内存异常
问题描述:
我在将文件从网页上传到服务器时遇到问题。它适用于高达200 MB的文件,但开始抛出内存异常。 你能帮我 我已经粘贴下面使用fileStream时出现内存异常
private void UploadToServer(HttpPostedFile oHttpPostedFile)
{
string CalCheckSum = string.Empty;
try
{
string FileName = getFileName(oHttpPostedFile.FileName.Trim());
if (File.Exists(Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName)))
{
File.Delete(Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName));
}
string serverFilePath = Server.MapPath("Upload") + "\\" + System.IO.Path.GetFileName(FileName);
FileStream fs = new FileStream(serverFilePath, FileMode.CreateNew);
string strFileFormName = serverFilePath;
// Uri oUri = new Uri(strUrl);
// DFB: Upload goes into stream
Stream myStream = oHttpPostedFile.InputStream;
string _name = oHttpPostedFile.FileName;
string _contentType = oHttpPostedFile.ContentType;
// DFB: Create buffer for stream
Byte[] myBuffer;
myBuffer = new byte[10240];
if (myStream.Length == 0)
{
//Zero Bytes file Can not be processed
CalCheckSum = string.Empty;
return;
}
else if (myStream.Length > 10240)
myBuffer = new byte[10240];
else
myBuffer = new byte[myStream.Length];
StringBuilder filecontent = new StringBuilder();
int fileLength = (int)myStream.Length;
int length = (int)myStream.Length/myBuffer.Length + 1;
int lastPacketLength = (int)myStream.Length % 10240;
int count = 1;
while (myStream.Read(myBuffer, 0, myBuffer.Length) > 0)
{
if (count == length)
fs.Write(myBuffer, 0, lastPacketLength);
else
fs.Write(myBuffer, 0, myBuffer.Length);
count++;
}
fs.Close();
fs.Dispose();
myStream.Dispose();
myBuffer = null;
myStream = null;
FileStream fileStream = File.OpenRead(serverFilePath);
byte[] pbytCombinedArrays = new byte[fileLength];
int numBytesToRead = fileLength;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = fileStream.Read(pbytCombinedArrays, numBytesRead, numBytesToRead);
// Break when the end of the file is reached.
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
fileStream.Dispose();
fileStream.Close();
}
答
代码你得到的异常,因为你正在尝试比允许的应用程序分配更多的内存。 Web应用程序通常限制在300 MB左右。
解决方案是避免将整个文件读入内存。这对于Web应用程序一次处理来说太大了。
你从哪里得到例外?在'新的字节[fileLength]'? – Guffa 2013-05-07 11:58:54
感谢您的快速响应。是的,我正在同一个地方。 FileStream fileStream = File.OpenRead(serverFilePath); byte [] pbytCombinedArrays = new byte [fileLength]; – TheDumbCoder 2013-05-07 12:15:08
您是否需要将所有数据读入数组?在你展示的代码中,你不用任何东西。 (此外,您可以使用'byte [] pbytCombinedArrays = File.ReadAllBytes(serverFilePath);'而不是代码的最后部分。) – Guffa 2013-05-07 12:23:24