を探して高速実装IEnumerable/IEnumerator
-
20-09-2019 - |
質問
監督-選手コメンの最適化を同時コレクションという小ロック競合を読み込み.最初のパスを使ったリンクリストをさせてくれたみロックに書き込みが同時に読み込みが続くブロック解除.この使用のカスタム IEnumerator
へ 利回り 次のリンク。一度始めたとの比較コレクションでの繰り返し処理、無地 List<T>
アナログ時計は針で直感的に実施した約半分の速度( from x in c select x
に1*m*項目は、 24ms のための List<T>
や 49ms 私のコレクション).
い利用 ReaderWriteLockSlim
なアプローチを中心に少しで競を読み込みで使うことがで List<T>
とします。私の読み込みロックに繰り返し処理を開始していないときが完了した収パターンのためのマ IEnumerable
, foreachングにおける内部 List<T>
.現在でしたっけ 66ms.
I覗いリストなのか、この内店 T[]
およびカスタム IEnumerator
移動する指数の前を返します現在のインデックス値とします。現在、動 T[]
として保存手段になくメンテナンス作業 が稿, 私を追いかけマイクロ秒単位.
したものを模倣し、 IEnumerator
移動のインデックスを配列で、最高の思いをした ~38ms.ように見えるので List<T>
その秘伝のソースまた何より早い実施のための反復子?
更新: が私の主な速度である彼走っていたデバッグコンパイル、 List<T>
が明らかにリリースコンパイル。リマの実装は、まだまだ髪の毛より遅くな List<T>
,altough"モノ"からなります。
一つの提案んからの友人であるBCLでは高速で、GACしたのシステム。してこの試験は、GACの試験と理論です。
解決
取得し、ロック解除に関して繰り返し音が悪そうなアイデアがうまくいかない場合を行う Add
または Remove
りますので、無理に押し込まないで繰り返し処理のリストが無効のiterator. List<T>
確かということだと思いる。
ばご利用の場合せ相談したい ReaderWriterLockSlim
周辺の全体のプロセスの繰り返し処理ではなく、一項目となりました。この効率化 や を強化するというない場合はどのようにうことで、さまざまな企画を並行処理しますか?場合、ライターに追加します要素は以前にもちろん、今年も、簡単な実装を返し同じ要素。反対側のような出来事が起きないようにと、撤去の反復子がスキップ要素になります。
最後に、です。NET4.0オプション?ないのであ性の高い最適な兼職の状況所蔵があ---
編集:いない現在の状況を建設する反復子を手でこするための調査を使用していますので、structの IEnumerator<T>
, 作のコレクションを明示的にすることを宣言するなどの List<T>
います。で は 平均を使用変更可能な構造体で、子猫の叫び全世界るものですが、万が一これが絶対的に重要性があると考えますとともに暮らしながら、恐怖では、少なくともり、試してみる価値がある。