読んだ - R3のコードから見る実践LINQ実装最適化コンカレントプログラミング実例

https://neue.cc/2024/05/01_R3_Presentation.html

合わせてスライドも読む。

TIPS: class と struct をエディタ上で視覚的に区別する

44

ちなみに、私はエディタ上で class と struct を視覚的に区別したいので、struct は緑色にしています(enumは黄色)。かなり捗るのでお勧め

真似したい、Visual Studio だとどこで設定するといいのだろう。

TimeProvider DeepDive

二点の経過時間を求めるなら、Stopwatch.GetTimeStamp() と Stopwatch.GetElapsedTime(timestamp) を使うのがよい。

このlongは、通常は高解像度タイムスタンプ、WindowsではQueryPerformanceCounterが使われています。TimeSpanでよく使うTicksではないことに注意してください。

BenchmarkDotNet

マイクロベンチマークを取るときは必ずBenchmarkDotNetを使ってください。

mutable Struct

最適化に便利。でも readonly を付けるとコンパイルエラー無しで書き換え不可になるので注意。

Rx の Operator は ThreadSafe ではない

32p

並列で OnNext を叩くと壊れる。これは R3 も同様。

35p

Observable の呼び出し側が単一ストリームはシングルスレッドを保証してあげる必要がある。

この辺りそうだろうな思っていたけどちゃんと言及されている文章を見つけられてよかった。