メンバーに対して単純なプロパティを使用する場合、より多くのオーバーヘッドがありますか?

contactmatt

メンバーに対して単純な1プロパティを使用する場合、より多くのオーバーヘッド(つまり、メモリ、CPU、追加のILなど)がありますか?

1 「ゲッター」と「セッター」のアクセシビリティは同じです。値をメモリに格納する以外に、ゲッターとセッターで追加のロジックは発生しません。

Private CustomerId as Integer
Public CustomerName as String

対。

Private Property CustomerId as Integer
Public Property CustomerName as String
デビッド

次のコードに対してILDasmツールを実行します。

public class Access
{
    public int NumberField;
    public int NumberProp { get; set; }
}

その結果、フィールドに対して次のILが生成されます

.field public int32 NumberField

そして、プロパティについては以下

.field private int32 '<NumberProp>k__BackingField'
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
.method public hidebysig specialname instance int32 
    get_NumberProp() cil managed
{
    // Omitting the entire IL code
} // end of method Access::get_NumberProp
.method public hidebysig specialname instance void 
    set_NumberProp(int32 'value') cil managed
{
    // Omitting entire IL code
} // end of method Access::set_NumberProp

つまり、定義した「単純な」プロパティの概念全体は、コンパイラがその方法を理解すると実際には存在しません。k_BackingField値を挿入し、そのバッキングフィールドにアクセス/設定するゲッター/セッターを作成します。 。単純な場合でも、メソッドのみの属性をget / set関数にアタッチできることに注意してください。

このようにあなたの質問に答えるために、はい、そのget / setはまだメソッド呼び出しをもたらすので、より多くのオーバーヘッドがあります。編集:contactmattによって指摘されているように、これらの呼び出しはJITコンパイラーによってインライン化される場合があります。これにより、すでに最小化されているオーバーヘッドがゼロになります。

コンパイラの魔法と砂糖の同様の外観については、LambdaキャプチャがILの後でどのように見えるかも確認してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インラインHTMLと比較してディレクティブを使用する場合、多くのオーバーヘッドがありますか?

分類Dev

ローカルネットワークを介してIPアドレスではなくドメイン名でデータベースに接続する場合、かなりのオーバーヘッドがありますか?

分類Dev

sort()へのテンプレートパラメーターとして基準を渡すことと比較すると、qsort()への基準関数ポインターを渡すよりもオーバーヘッドが少なくなりますか?

分類Dev

コンパイル時に型がわかっている場合、ポリモーフィック派生型を使用した追加のオーバーヘッド呼び出しサブルーチンはありますか?

分類Dev

単純なアプリの場合、Appleプッシュ通知を使用する必要がありますか、それとも単にバックグラウンドでデータをプルする必要がありますか?

分類Dev

を大量に使用することにオーバーヘッドはありますか?フィールド/プロパティ比較の演算子?

分類Dev

mouseOverがオーバーライドされている場合、背景ボタンのプロパティを変更できなくなりました

分類Dev

私は、モバイルアプリのバックエンドのためのOAuth(または他に何を)使用する必要がありますか? - このような場合にのみ* 1 *「サードパーティ」のアプリケーションがあります

分類Dev

javascript es2018でオーバーライドする代わりに、オブジェクトをマージしてそれらのintプロパティを合計する簡単な方法はありますか?

分類Dev

「this」を使用してクラスのプロパティ、メンバー、またはメソッドを呼び出す必要がありますか?

分類Dev

PythonとChromeドライバーを使用してより多くのコンテンツを複数回ロードするには、Webサイト上の特定のオブジェクトをクリックする必要があります

分類Dev

マングースはオブジェクトを作成する必要がありますが、別のオブジェクトにすでにこのプロパティがある場合は、プロパティをスキップしてください

分類Dev

Collections.unmodizableMap API:親マップを頻繁に更新する場合のパフォーマンスのオーバーヘッドはありますか?

分類Dev

単体テストでは、アプリケーションサーバーで実行していない場合にデータソースをどのようにセットアップする必要がありますか?

分類Dev

ストアドプロシージャにオプションのパラメータを追加し、そのパラメータを渡さなかった場合は、すべての詳細をフェッチする必要があります

分類Dev

コンバイナなしの並列ストリームの削減は、複数のスレッドによって正しく実行されます。この場合、いつコンバイナーを使用する必要がありますか?

分類Dev

オーバーライドされたメソッドを呼び出すスーパークラス参照がポリモーフィックに見えるのはなぜですか、それがオーバーライドされたメンバー変数を取る場合はそうではありませんか?

分類Dev

equalsメソッドはスーパークラスのequalsをオーバーライドし、対称的ではない場合があります

分類Dev

パラメータバインディングの名前はnullまたは空であってはなりません!名前付きパラメーターの場合、Javaバージョンのクエリメソッドパラメーターには@Paramを使用する必要があります

分類Dev

コントローラヘルパーメソッドを使用する場合の範囲の値が正しくありません

分類Dev

appengineエンティティのget()メソッドとput()メソッドをオーバーライドして、memcacheを使用するようにする効率的な方法はありますか?

分類Dev

通常の関数よりも静的メンバー関数を使用することによるオーバーヘッドはありますか?

分類Dev

Cなどの他のシステムプログラミング言語での関数の通常の使用と比較して、Rustスタイルのメソッド呼び出しアプローチにオーバーヘッドはありますか?

分類Dev

golangでは、メソッドの1つにポインターレシーバーが必要な場合、ポインターレシーバーを持つように型のすべてのメソッドを変更する必要がありますか?

分類Dev

いつプライベートメンバーを静的にする必要がありますか、そして私の場合、これはどのようにオーバーライドされますか

分類Dev

モデルプロパティは、かみそりページ内にバインドされている入力の値の多くを実行します

分類Dev

グーグルクロームの「利用可能な場合はハードウェアアクセラレーションを使用する」機能はより多くのバッテリーを消費しますか?

分類Dev

これらのパーツがバージョン間で変更されていない場合、Androidアプリがアプリバンドルパーツを更新しないようにする方法はありますか?

分類Dev

NVMを介してバージョンを変更する場合、node-inspectorなどのグローバルパッケージへのパスをどのように更新する必要がありますか?

Related 関連記事

  1. 1

    インラインHTMLと比較してディレクティブを使用する場合、多くのオーバーヘッドがありますか?

  2. 2

    ローカルネットワークを介してIPアドレスではなくドメイン名でデータベースに接続する場合、かなりのオーバーヘッドがありますか?

  3. 3

    sort()へのテンプレートパラメーターとして基準を渡すことと比較すると、qsort()への基準関数ポインターを渡すよりもオーバーヘッドが少なくなりますか?

  4. 4

    コンパイル時に型がわかっている場合、ポリモーフィック派生型を使用した追加のオーバーヘッド呼び出しサブルーチンはありますか?

  5. 5

    単純なアプリの場合、Appleプッシュ通知を使用する必要がありますか、それとも単にバックグラウンドでデータをプルする必要がありますか?

  6. 6

    を大量に使用することにオーバーヘッドはありますか?フィールド/プロパティ比較の演算子?

  7. 7

    mouseOverがオーバーライドされている場合、背景ボタンのプロパティを変更できなくなりました

  8. 8

    私は、モバイルアプリのバックエンドのためのOAuth(または他に何を)使用する必要がありますか? - このような場合にのみ* 1 *「サードパーティ」のアプリケーションがあります

  9. 9

    javascript es2018でオーバーライドする代わりに、オブジェクトをマージしてそれらのintプロパティを合計する簡単な方法はありますか?

  10. 10

    「this」を使用してクラスのプロパティ、メンバー、またはメソッドを呼び出す必要がありますか?

  11. 11

    PythonとChromeドライバーを使用してより多くのコンテンツを複数回ロードするには、Webサイト上の特定のオブジェクトをクリックする必要があります

  12. 12

    マングースはオブジェクトを作成する必要がありますが、別のオブジェクトにすでにこのプロパティがある場合は、プロパティをスキップしてください

  13. 13

    Collections.unmodizableMap API:親マップを頻繁に更新する場合のパフォーマンスのオーバーヘッドはありますか?

  14. 14

    単体テストでは、アプリケーションサーバーで実行していない場合にデータソースをどのようにセットアップする必要がありますか?

  15. 15

    ストアドプロシージャにオプションのパラメータを追加し、そのパラメータを渡さなかった場合は、すべての詳細をフェッチする必要があります

  16. 16

    コンバイナなしの並列ストリームの削減は、複数のスレッドによって正しく実行されます。この場合、いつコンバイナーを使用する必要がありますか?

  17. 17

    オーバーライドされたメソッドを呼び出すスーパークラス参照がポリモーフィックに見えるのはなぜですか、それがオーバーライドされたメンバー変数を取る場合はそうではありませんか?

  18. 18

    equalsメソッドはスーパークラスのequalsをオーバーライドし、対称的ではない場合があります

  19. 19

    パラメータバインディングの名前はnullまたは空であってはなりません!名前付きパラメーターの場合、Javaバージョンのクエリメソッドパラメーターには@Paramを使用する必要があります

  20. 20

    コントローラヘルパーメソッドを使用する場合の範囲の値が正しくありません

  21. 21

    appengineエンティティのget()メソッドとput()メソッドをオーバーライドして、memcacheを使用するようにする効率的な方法はありますか?

  22. 22

    通常の関数よりも静的メンバー関数を使用することによるオーバーヘッドはありますか?

  23. 23

    Cなどの他のシステムプログラミング言語での関数の通常の使用と比較して、Rustスタイルのメソッド呼び出しアプローチにオーバーヘッドはありますか?

  24. 24

    golangでは、メソッドの1つにポインターレシーバーが必要な場合、ポインターレシーバーを持つように型のすべてのメソッドを変更する必要がありますか?

  25. 25

    いつプライベートメンバーを静的にする必要がありますか、そして私の場合、これはどのようにオーバーライドされますか

  26. 26

    モデルプロパティは、かみそりページ内にバインドされている入力の値の多くを実行します

  27. 27

    グーグルクロームの「利用可能な場合はハードウェアアクセラレーションを使用する」機能はより多くのバッテリーを消費しますか?

  28. 28

    これらのパーツがバージョン間で変更されていない場合、Androidアプリがアプリバンドルパーツを更新しないようにする方法はありますか?

  29. 29

    NVMを介してバージョンを変更する場合、node-inspectorなどのグローバルパッケージへのパスをどのように更新する必要がありますか?

ホットタグ

アーカイブ