我有 10 个线程将数千个小缓冲区(每个 16-30 字节)写入随机位置的大文件。一些线程在 FileStream.Write() 操作上抛出 OutOfMemoryException。
是什么导致 OutOfMemoryException ?要找什么?
我正在使用这样的 FileStream(对于每个书面项目 - 此代码从 10 个不同的线程运行):
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite, BigBufferSizeInBytes, FileOptions.SequentialScan))
{
...
fs.Write();
}
我怀疑在 FileStream 中分配的所有缓冲区都没有被 GC 及时释放。我不明白的是,为什么 CLR 不只是运行 GC 循环并释放所有未使用的缓冲区,而不是抛出?