2009-09-18 13 views
7

可能性の重複:CPU及び/又はメモリアクセス結合しているデータクランチアプリケーションにおいて
実行時にどのようなオーバーヘッドが拡張メソッドに関連付けられていますか? (.NET)

Extension Method Performance

、一行拡張メソッド顕著のオーバーヘッドがありますか?それは通常の関数呼び出しより高いですか、それとも単純にコンパイラ/ IDEの抽象化ですか?例えば、1秒に数千回以上呼び出された場合、以下の機能が不合理であるとします:

public static void WriteElementString(this XmlTextWriter writer, string name, int data) 
{ 
    writer.WriteElementString(name, data.ToString()); 
} 

答えて

18

オーバーヘッドはありません。これは、異なる構文で呼び出された静的メソッドです。生成されたILは単なる通常の呼び出しです。あなただけ

XmlWriterExtensions.WriteElementString(writer, name, data); 

と呼ばれるかのように言い換える

、あなたの拡張メソッドのためのオーバーヘッドが

writer.WriteElementString(name, data); 

のためにまったく同じです...生成されたILはまったく同じになりますので、 。

パフォーマンスの点では、「1秒に数千倍以上」は、はありません。です。余分なレベルのスタックを持つためのオーバヘッドは、そのレベルではまったく重要ではありません。たとえメソッドがインライン化されていなくても、このケースでは非常に可能性が高いと思います。

しかし、パフォーマンスの通常のルールが適用されます。測定するまではすべて推測です。または、少なくとも実際ののヒットは推測です。 "拡張メソッドは、コンパイラ内に構文的な砂糖を持つ単なる普通のメソッドです"とは推測されません。

3

文法的な砂糖という単純なコンパイラの抽象概念は、全くオーバーヘッドがありません。

+2

構文的砂糖?それともスクラロースの作り方ですか? –

関連する問題