私はVisual Studio 2017を使用しており、C#とwinformを使用して散布図でリアルタイム値を表示するプログラムを作成しようとしています。コンピュータのリソースを節約して散布図に50,000を超える値をプロットするにはどうすればよいですか?
以下のソースコードでは、イベントが発生したときに新しい値(1秒あたり3〜5回)を取得するたびにリアルタイム値を表示することができました。
valueArrayはGetRealTimeData関数を通じて新しい値を連続的に取得し、グラフには配列のすべての要素が表示されます。
valueArray[valueArray.Length - 1] = Convert.ToDouble(GetRealTimeData().Trim());
Array.Copy(valueArray, 1, valueArray, 0, valueArray.Length - 1);
this.chart1.Series["Series1"].Points.Clear();
this.chart1.Series["Series1"].Points.DataBindY(valueArray);
はしかし、私はそれがチャートで3000個の値を示した場合でも、それは多くのコンピュータリソースを消費しているこのプログラムを使用して問題を、持っています。
グラフを50,000〜100,000の値にすることを計画していますが、新しい値を取得するたびに古い値をコピーして表示することは、あまりにも多くのリソースを使い果たしてしまうと思います。
この種のジョブを実行するための機能や方法があるかどうかを知りたいと思います。私はいくつかのアドバイスやアイデアを得ることができれば感謝します。
なぜvalueArrayをvalueArrayにコピーしていますか?そのspanArrayとは何ですか、なぜあなた自身もコピーする必要がありますか? –
@Camilo Terevintoご意見ありがとうございます。 valueArrayには現在3000個の要素を含めることができます。新しい値が追加されるたびに、すべての要素を表示するようにします。3000個以上の要素を取得した場合、最新の要素を削除するため、Array.Copyメソッドを使用しました。 spanArrayは、別のグラフをプロットする別の配列でした。最初に投稿したときにそれを省略するのを忘れてしまった。ごめんなさい! – maynull
これはおそらくこれを行うための最も恐ろしい方法(パフォーマンス上の)です。配列がうまくいきません。別のデータ構造が必要です –