我有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 循环并释放所有未使用的缓冲区?