2012-03-07 4 views
12

可能性の重複:
Inline functions in C#?
What is method inlining?は、この属性は何をするのか:MethodImplOptions.NoInlining(または:メソッドを 'インライン化' されているもの)

を私はコードをデバッグしてきましたこの問題の「可能な」原因は、このコードでマークされている関数内にあります。

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] 
protected virtual void PropertyHasChanged() 

MSDNには次のように記載されています。メソッドをインライン化できないように指定します。

しかし、メソッドを 'インライン化'するのは何ですか?

EDIT:

明確にする:PropertyHasChanged()メソッドが内部オブジェクトカウンタ(これに1を加算する)すべてのプロパティと更新のSETメソッドで呼び出されます。そのカウンタが0より大きい場合、オブジェクトは「ダーティ」とマークされ、保存が呼び出されるとデータベースに保存されます。 counter = 0の場合、オブジェクトはデータベースに保存されません。今度は、このコードが実行されない(カウンターが増加しない)ので、オブジェクトがデータベースに保存されないようにする考えがあります。

+2

これは有効な質問ですが、このメソッドのインライン化または非インライン化は、デバッグしているすべての問題とはまったく関係がありません。 – AakashM

+0

@Veger:私はその記事を読んだことがありますが、主にC#のインラインメソッドに関するもので、意味するものではありません。 – Michel

+0

(私のDUPE候補はC#固有ではありませんが、実際にはインライン展開を説明しています) – AakashM

答えて

18

メソッド/プロパティのインライン展開は、コンパイラがそれを取り出して置き換えることを意味します。その内容を含む呼び出し(正しい変数などを確認する)。これはC#固有のものではありません。

これは正常に実行されます。例えば

、この方法およびコール:

private long Add(int x, int y) 
{ 
    return x + y; 
} 

var z = Add(x, y); 

をコンパイラが(プロセスで除去方法)として、それをインライン化することができる:

var z = x + y; 

Wikipeida物品Inline expansion開始with:

Inインライン展開、またはインライン展開は、関数呼び出しサイトを呼び出し先の本体で置き換える手動またはコンパイラの最適化です。この最適化は、プログラムの最終サイズ(すなわち、バイナリファイルサイズ)を増加させる可能性のあるコストで、実行時に時間および空間の使用を改善することができる。

+0

この明らかな説明をありがとう! – Michel

+2

分かりやすくするために、C#コンパイラはメソッドを決してインライン化しません。それはJITterの仕事です。 – IllidanS4

関連する問題