仮想vsフpocoうのが早い?
質問
私の維持に対応したアプリケーションの設計のようになります:
messy code --abuses--> simplePoco (POCO data capsule)
データのカプセルである単純なクラスのsetterか、セッター(物性)を使用するDIの枠組みと一貫して使用は、IoCのコンテナをインスタンスのデータをカプセル(ラッキー!).
の問題については親権者の方の同意が必要を紹介し、"変更届"の仕組みを simplePoco
messy code --abuses--> simplePoco
|
V
changes logger,
status monitor
(I wanna know about changes)
いくつかのオプション:
をご紹介
IPoco
を変更したり汚コードができるよう、いsimplePoco
は、速やnotifyingPoco
りたいときに変更通知を選択的に遅)?ま---全ての仮想ロマびユーザーインターフェイス
notifyingPoco
クラストップsimplePoco
(低速)?デザインパターンがわからない?
では、クライアント/サーバシステムを構築していると思うだけの変更はサーバーの一部なのでできれば、むしろ ない タッチの汚コードまたはクライアントコードがserializersと反省と怖い忍者スタッフが...)してはならないが破損します。
うインターフェイスを利用防止JITからinliningの電話getter/setter?
どの道のりを考えるとsimplePocoインスタンスが 重 虐待を受け?
解決
バーチャルコールの任意の種類(クラスのインターフェイス上、または直接か - のすべてのはインターフェース呼び出しが仮想です!)CLRのJITによってインライン化されることはありません。いえ、インタフェースの呼び出しは、彼らは常に潜在的にリモート/プロキシパスを通過しなければならないので少し遅いです、そして、彼らは関数の本体に入る前に、クラスの先頭にポイントをthis
ポインタをシフトする必要があるため。クラスはMarshalByRefObject
から派生されていない限り、直接クラスメンバ上の仮想呼び出しは、プロキシのチェックをヒットしない、シフトを行う必要がない、そして決してます。
これら二つの間のパフォーマンスの違いは非常に軽微なものであるので、あなたはおそらくそれらを無視し、代わりに、実装のデザインと使いやすさの清潔さに焦点を当てるべきである、と述べたこと。