在我们的应用程序中,我们以不同的方式(通过不同的库)编写多个日志文件。当刷新它的缓冲区时,其中一个文件会不时阻塞。当时的堆栈跟踪是:
at Microsoft.Win32.Win32Native.WriteFile(SafeFileHandle handle, Byte* bytes, Int32 numBytesToWrite, Int32& numBytesWritten, IntPtr mustBeZero)
at Microsoft.Win32.Win32Native.WriteFile(SafeFileHandle handle, Byte* bytes, Int32 numBytesToWrite, Int32& numBytesWritten, IntPtr mustBeZero)
at System.IO.FileStream.WriteFileNative(SafeFileHandle handle, Byte[] bytes, Int32 offset, Int32 count, NativeOverlapped* overlapped, Int32& hr)
at System.IO.FileStream.WriteCore(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.FileStream.FlushWrite(Boolean calledFromFinalizer)
at System.IO.FileStream.Flush(Boolean flushToDisk)
...
我注意到在 Process Explorer(来自 Sysinternals Suites)中,阻塞文件总是有很多“引用”:
但是其他每个日志文件(总是很好)只有 1 个引用。
文件的“参考”是什么?是否有可能是文件在刷新时被阻止的原因?