はオブジェクトVB2010年にoptimalizationダイナミッククライアントまで、フルのC#4.0?
-
26-09-2019 - |
質問
を持っている人がいることを提唱するとともにC#4.0機能が導入されたの dynamic
キーワード"と同様のものをすべてがオブジェクト"の特徴VB.しかし、呼びダイナミックな変数の翻訳が行われ、代表回からの委譲呼び出されます。VB、 Object
, なしキャッシュを用の各電話以外の入力方法は、下のフード反射、時計なんと400倍の性能ます。
ての ダイナミック型delegate-最適化およびキャッシュ も追加されているVB untypedメソッドの呼び出し、またはVBのuntypedオブジェクトだが遅くなるの?
解決
液
一部の研究のより良い読み取り 前記第 記ンPassantし、以下の結論
- VB.NET 2010年のDLR;
- 実践できる
IDynamicMetaObjectProvider
したい場合は明示的に支援動力学、VB.NET コンパイラが更新されることを認識し; - VBの
Object
に利用させて頂きますのDLR方法キャッシュオブジェクトが次のどれかの場合を実装しIDynamicMetaObjectProvider
; - BCLや枠組みの種類はやめてください
IDynamicMetaObjectProvider
, 使用し、Object
などの種類ご種類が呼び出すメソッドの古典的な、キャッシュVB.NET レイバインダー.
背景:未熟なぜ遅結キャッシュがVB信頼性とパフォーマンスを
一部の人間の人ハンスPassant、彼の答えがそのようなキャッシュ-非キャッシュ下旬に結合する可能性のある。合わせなければならないという、大きな違いは、VBおよびその他の遅-接合技術に注意してください) IQueryInterface
とCOM?).
遅めの結合を簡単な原理指名とそのパラメーター宣言することによって、すべて、このクラスのメソッドとその親の授業による方法が Type
インターフェイス(およびVB、法、財産の分野で 見 同じく、このプロセスでも遅く).ればと考えられます方法でテーブル順序付けは、簡単にそれらが単一の直接、入力方法。
きっとできる見上げの方法には、一度その後の保存方法をポインタをルックアップテーブルにこのことは大きく加速す。キャッシュ方法との結合にDLRが必要と置き換え方法-電話のポインタの実際の方法が可能です。後の最初の呼び出ることが一桁高速化のための各呼び出(200xに800x倍ます。
例としてこの事は、一部のコードを示します。場合にはすべてのクラスは、 .Name
文字列プロパティが、授業のない共通の上位またはインタフェースですnaively並べ替えリストのいずれかの人のように:
' in the body of some method '
List<Customers> listCustomers = GetListCustomers()
List<Companies> listCompanies = GetListCompanies()
listCustomers.Sort(MySort.SortByName)
listCompanies.Sort(MySort.SortByName)
' sorting function '
Public Shared Function SortByName(Object obj1, Object obj2) As Integer
' for clarity, check for equality and for nothingness removed '
return String.Compare(obj1.Name, obj2.Name)
End Function
このコード(同様のもので、少なくとも実際にわたって生産の私のクライアントするのに使用したいというAJAXコールバック.せずに手動でキャッシュの .Name
性、既に中規模のリストの半分以下の万物の結合コードになったような顕著な負担といった全体のサイトです。またハードウにこの問題が、その物語ます。を使用して固定した後、このサイトを取り戻し95%のCPU資源。
その答えのハンスの問題 "なんて大きな問題が心配" ソフトバンクグループこれは大きな問題(または),があります。VBプログラマを頂いておりも滑用下旬に結合する。
この特定のケースでは、多くのようにVB.NET 2010年には明らかになって紹介が遅結合して Object
残る邪悪を知るべきではないとの比較 dynamic
.
PS:後結合性の問題は非常に難しいトラック、を持っていない場合、性能プロファイラとノウハウのすべて遅いとの結合を実装によって内部でのコンパイラです。
他のヒント
から引用新しい記事で何ます:
のVisual Basic 2010にはに更新されました 完全にその中でDLRをサポート latebinder
それよりも明確な得ることができません。それはDLRである実装キャッシングます。
よい質問。 この記事ので、私は、答えは「ノー」である推測しているにMSDNの雑誌にVB.Netは、動的言語ランタイムをサポートするように変更されており、簡単には実行時の変更点について説明しますが、キャッシュを言及していないと言います。
んの誰もがよく知っていますか?