gpt4 book ai didi

c# - C# 中的 OutOfMemoryException

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:36 25 4
gpt4 key购买 nike

此代码会导致某种内存泄漏。我假设它是由 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);
}
}

最佳答案

问题几乎可以肯定是您在重复分配新数组,并且在内存中它们被分配为连续的 block ,所以我可以理解它是如何咀嚼它的。

如何稍微调整一下,以便您只创建一次缓冲区然后重新使用它,除非您进入所需的 block 大小小于标准 block 大小的 if。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com