処理中、バイト配列をnewで確保し、特に解放処理を行わず、処理を抜けることで解放していると考えています。この処理を定期的に繰り返しているとWorking Setの値が上昇していきます。
ここで質問ですが、Working Setの値が上昇する要因は、何が考えられますでしょうか?
public byte[] ToByteArray() { int size; // バイト配列に変換 byte[] temp0 = BitConverter.GetBytes(_DLE); byte[] temp1 = BitConverter.GetBytes(_STX); byte[] temp2 = BitConverter.GetBytes(_DATALENGTH); byte[] temp5 = BitConverter.GetBytes(_BCC); byte[] temp6 = BitConverter.GetBytes(_ETX); size = GetLength(); ※ 例えば、10と返ってきます // 各要素を一つのバイト配列へ格納 byte[] sendBytes = new byte[size]; ※ ここで、10バイトの領域を確保します temp0.CopyTo(sendBytes, 0); temp1.CopyTo(sendBytes, 1); // ビックエンディアンで格納 Array.Reverse(temp2); temp2.CopyTo(sendBytes, 2); _DATA.CopyTo(sendBytes, 4); // BCCを計算 int BCC = 0; for (int i = 2; i < (4 + (_DATALENGTH - 1)); i++) { BCC += sendBytes[i]; } sendBytes[5 + (_DATA.GetLength(0) - 1)] = (byte)(256 - BCC); // 2の補数をとる sendBytes[size - 1] = temp6[0]; // バイト配列を返す return sendBytes; }
OS:Windwos 7
言語:C#
開発ツール:Visual Studio 2005
実行環境:.NET Framework 2.0
以下、追記です。
実際に確保するサイズは、65KBを超えません。大きくて600B程です。
現状:
パフォーマンスモニターで、対象アプリのWorking Setを監視しています。
その結果、上昇、下降を繰り返しながら徐々に右肩上がりに上昇しています。
不具合:
対象アプリは、長期実行(24H、365日)するため、メモリが不足することにならないか?
欲しい答え:
サンプルコードのような処理では、問題にならない。