这个问题是Efficient way to transfer many binary files into SQL Server database的后续问题
我最初问为什么 usingFile.ReadAllBytes
会导致快速的内存使用,并得出结论使用该方法将数据放在大型对象堆上,在运行时不容易回收。
我现在的问题是如何避免这种情况?
using (var fs = new FileStream(path, FileMode.Open))
{
using (var ms = new MemoryStream())
{
byte[] buffer = new byte[2048];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
return new CustomFile { FileValue = ms.ToArray() };
}
}
以下代码旨在通过分块读取文件而不是一次读取文件来解决该问题,但它似乎有同样的问题。