繰り返しますが、皆さんにとって簡単な質問かもしれません。Silverlight の舞台裏で行われていることについて、私はあまり理解していません。
ポイントを追加および削除して、20 ミリ秒ごとに更新されるローリング スコープとして使用するグラフ作成アプリ (Visiblox) があります。擬似コード:
List<Point> datapoints= new List<Point>();
Series series = new Series(datapoints);
void timer_tick(){
datapoints.Add(new Point);
datapoints.RemoveAt(0);
// no need to refresh chart, it does refresh automatically
}
このチャート作成ツールで 6 シリーズを実行すると、少し遅くなり始めました。ティックを 10ms に変更しても何の違いもありませんでした。チャートは同じ速度で更新されたので、20ms が速度制限 (UI またはチャート?) のようです。
で試してみたCompositionTarget.Rendering
ところ、同じ結果が得られました。20ms 以下では、速度に違いはありませんでした。
その後、誤って両方を有効にして速度が 2 倍になりました。そこで、複数のスレッド (2、3、4) でテストし、速度を 2 倍、3 倍、4 倍にしました。ロックを生成する必要があるプロセスがわからないため、これにはまだロックがありませんが、データの破損やメモリリークはありません。
私が持っている質問は、なぜ 20 ミリ秒で遅いチャートが 10 ミリ秒で実行できないのに、マルチスレッド化すると途方もなく高速になるのかということです。UI の更新プロセスは高速化されていますか? チャートの計算は 2 倍になりますか? または、単一の DispatcherTimer を実行できる速度に制限はありますか?
ありがとう!
編集:私は組み込みコーディングのバックグラウンドを持っているので、スレッドとタイミングについて考えると、すぐにハードウェアのピンを切り替えてスコープを接続してプロセスの長さを測定することを考えます。私は C# のスレッドが初めてで、スコープを接続するためのピンがありません。スレッドのタイミングをグラフィカルに表示する方法はありますか?