我與vb.net下面的代碼:.NET內存泄漏,使用GC.Collet()或者不
Public Async Function WriteData(buffer() As Byte, offset As Integer, count As Integer) As System.Threading.Tasks.Task
Try
Using data_writer = IO.WindowsRuntimeStreamExtensions.AsStreamForWrite(_outputStream)
Await data_writer.WriteAsync(buffer, offset, count)
Await data_writer.FlushAsync
End Using
Catch ex As Exception
Logger.Write(ex)
End Try
End Function
我調用該函數WriteDate太多,但我注意到在增加內存每次我調用函數,因爲您可以看到datawriter流和_outputStream被處置,因爲使用Using。
當我運行vs Profiler時,分析器顯示95%的內存被我的代碼中的「buffer」字節數組保留過多。
1-您是否在我的代碼中看到任何問題? 2-如何清除字節數組?
- 我下面的代碼添加到該函數的行等待data_writer.FlushAsync
buffer = Nothing
GC.Collect()
所以我的記憶不會像以前那樣增加後,但我打電話寫數據太多我的應用程序,和我請閱讀,建議不要調用GC.Collect太多。
不調用GC.Collect,內存跳轉到300 MB,GC.Collect()內存不超過50MB。
請指教。
謝謝
許多感謝@Hans,真是一個非常好的解決方案。 1-分裂緩衝區小於85K可能會降低性能和速度2-我如何重新使用緩衝區? – Sameh 2013-04-08 11:45:07
不,不存在由於小緩衝區I/O會明顯減慢的情況。除非你使緩衝區小於一千字節。注意過早優化,特別是在手機上。一個好的緩衝區大小是4096字節。我無法幫助您弄清楚如何重用緩衝區,我看不到調用此方法的代碼。 – 2013-04-08 11:59:08
非常感謝@Hans你的回答是公平的,謝謝你的時間。 – Sameh 2013-04-08 12:06:17