此代码会导致某种内存泄漏。我认为这是由new byte[]
引起的。
但是GC是否应避免这种情况?如果程序运行足够长时间,则代码将导致OutOfMemoryException
using (var file = new FileStream(fileLoc, FileMode.Open))
{
int chunkSize = 1024 * 100;
while (file.Position < file.Length)
{
if (file.Length - file.Position < chunkSize)
{
chunkSize = (int)(file.Length - file.Position);
}
byte[] chunk = new byte[chunkSize];
file.Read(chunk, 0, chunkSize);
context.Response.BinaryWrite(chunk);
}
}
最佳答案
问题几乎可以肯定是您在重复分配新数组,并在内存中将它们分配为连续的块,因此我可以理解它是如何通过它咀嚼的。
如何稍微重新调整一下内容,以便只创建一次缓冲区然后再使用它,除非您进入所需的块大小小于标准块大小的情况。
using (var file = new FileStream(fileLoc, FileMode.Open)) {
int chunkSize = 1024 * 100;
byte[] chunk = new byte[chunkSize];
while (file.Position < file.Length) {
if (file.Length - file.Position < chunkSize) {
chunkSize = (int)(file.Length - file.Position);
chunk = new byte[chunkSize];
}
file.Read(chunk, 0, chunkSize);
context.Response.BinaryWrite(chunk);
}
}
关于c# - C#中的OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9379847/