私はvb.netで次のコードを持っています:
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 を呼び出しすぎているのですが、関数を呼び出すたびにメモリが増加していることに気付きます。Using の使用により、datawriter ストリームと _outputStream が破棄されていることがわかります。
vs プロファイラーを実行すると、コード内の「バッファー」であるバイト配列によってメモリの 95% が過度に予約されていることがプロファイラーによって示されます。
1- 私のコードに問題はありますか? 2-バイト配列をクリアするにはどうすればよいですか?
-- その関数の Await data_writer.FlushAsync 行の後に次のコードを追加しました。
buffer = Nothing
GC.Collect()
そのため、メモリは以前のように増加しませんが、アプリで WriteData を呼び出しすぎて、GC.Collect を呼び出しすぎることは推奨されていないことを読みました。
GC.Collect を呼び出さないと、メモリは 300 MB にジャンプします。GC.Collect() を使用すると、メモリは 50 MB を超えません。
ご意見をお聞かせください。
ありがとう