我有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循环并释放所有未使用的缓冲区,而是抛出异常?