複数行のテキストボックスに表示したい、外部ソースである GPS プロッターから文字列入力を取得する兄弟用のアプリケーションを構築しています。誰かがこのアプリケーションを長時間実行したままにした場合、TextBox.MaxLength を超えたり、メモリ割り当てが過剰になったりすることは望ましくありません。
これを実装する良い方法は思いつきません。テキストボックスに最後の n 行を表示する必要があります。
編集:マークされたソリューションは正しいです。ありがとうジョン。結局ジェネリックにしました。以下は私が使用したものです。
public class ArrayBuffer<T>
{
private readonly int _maxLines;
private int _writePosition;
private readonly T[] _buffer;
public ArrayBuffer(int maxLines = 100)
{
_maxLines = maxLines;
_buffer = new T[_maxLines];
}
public T[] Push(T value)
{
_buffer[_writePosition++] = value;
_writePosition %= _maxLines;
return _buffer.Skip(_writePosition)
.Concat(_buffer.Take(_writePosition))
.Where(line => line != null).ToArray();
}
}
使用法:
var myArrayBuffer = new ArrayBuffer<string>(50);
string[] bufferedStringArray = myArrayBuffer.Push("some string");