次のようなデータ構造を探しています。
position whoCares bla ...
200.001890 -0.00110 -0.100000
199.997990 0.000790 -2.200000
199.952110 0.026330 -28.900000
199.780060 0.116370 -60.400000
199.321650 0.349330 -154.200000
198.242900 0.901430 -248.700000
196.447890 1.816030 -289.200000
... ... ...
タグを追加するか、列に新しいデータを追加することで、テーブルを両方の次元で拡張できます。データ サイズは、3 ~ 20 列、1 列あたり 100 ~ 10000 の double の範囲です。
これは、1 つのクラス インスタンスとして 1 つのデータ セットとして定義する必要があります。データ アクセスは次のようになります。
double[] Get(string tag) // data.Get("position")
double Get(string tag, int index) // data.Get("position", 17)
...
Dictionary<string, double[]>
またはを使用するだけで、これまでのところ簡単Dictionary<string, List<double>>
です。
現在、これはスレッドセーフである必要があり、優れたパフォーマンスが得られるはずです。しかし、単純なデータ アクセスは、パフォーマンスよりも重要です。
double[] Get(...)
参照を返すとマルチスレッド シナリオで問題が発生するため、 は内部データのコピーを返すことに注意してください。通常、1 人のライターと 1 ~ 3 人のリーダーが存在します。
と のようないくつかのことDictionary<string, double[]>
を試しました。double[]
List<double>
これに最適な方法は何ですか?C# 2.0 を使用するための他のデータ コンテナー/構造はありますか?
編集:
このクラスは、ハードウェアからすべてのデータを読み取る 1 つのライター スレッドによって埋められるデータ コンテナーとして機能する必要があります。アプリケーションの実行中、UI スレッドは単に図を描画するためにそのデータを読み取ります。
2 番目のシナリオは、以前と同様にライター スレッドですが、UI スレッドは、そのデータに対して計算を実行し、結果を 2 番目のデータ インスタンスに格納するスレッドに置き換えられます。このスレッドは、UI によって表示されます。