在某些過程中,我將對象存儲到文件(序列化)中。每批次將存儲100個文件。我很快就會收到「太多打開文件」的錯誤。寫入硬盤錯誤 - 打開文件過多
我在使用後立即關閉StreamWriter,並且我還嘗試處理該文件。我有一個多線程應用程序,但是我將存儲集中到一個線程中,以確保沒有多個X操作並行。我現在甚至按對象存儲對象(一次一個),我仍然得到這個錯誤。
它看起來像「關閉」或「處置」StreamWriter是不夠的。任何想法的人?
我嘗試了很多不同的代碼,但是這是我當前的代碼:
Log.i("Streamwriter opened");
StreamWriter outfile = new StreamWriter (filePath);
outfile.Write (content);
outfile.Close();
outfile.Dispose();
Log.i("Streamwriter closed");
我印這也是出於確保「開放」的文件時總是立刻跟着「關」的文件。
任何想法?
我猜的GC不能跟上你創建的文件的數量。你可以嘗試切換到SGen,看看是否有幫助 - http://www.mono-project.com/Working_With_SGen – Jason
我的猜測是,有其他打開的文件。您應該能夠使用樂器和其中一個文件相關模板來查看磁盤活動並查看哪些文件保持打開狀態。 –
按照@Jason的建議切換GC將無濟於事 - 這就是爲什麼使用'IDisposable'是*正確*做的原因。其他的東西可能會使用太多的文件(比如@Rolf說的)。請參閱http://stackoverflow.com/q/15886034/220643和鏈接瞭解更多信息。 – poupou