この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 24478|答える: 2

[出典] C# パフォーマンス最適化:レイジーは遅延を伴ってレイジーを初期化します<T>

[リンクをコピー]
掲載地 2019/06/17 16:17:17 | | | |
1. 概要

オブジェクトを作成するには多くの消費が必要で、実行中にそのオブジェクトが使われない場合もあるため、毎回オブジェクトを作成するのを避けるために、レイジー初期化(レイジーインスタンス化とも呼ばれます)が導入されます。

遅延初期化は で起こります。 NET 4.0は主にパフォーマンス向上、計算の無駄な回避、プログラムのメモリ要件削減に用いられています。 オンデマンドローディングとも呼ばれます。

2. 基本文法


3. 例を用いて実装する

まずは以下のコードで学生クラスを作成します。

以下のコードでコンソールプログラムを作成します:

デバッグのブレークポイントを設定した後、newの後にStudentのIsValueRecreatedの値はfalseで、値の値はnullであることがわかりました



そして、Nameプロパティを呼び出すと、studentのIsValueCrcreatedの値は真となり、値の値はもはやnullではありません



ラン結果:



学生はName属性が出力されたときのみ初期化され、すなわち初めて使用されたときに初期化され、消費削減という目的を達成することがわかります。

この例はシンプルで<T>、Lazyの最も基本的な使い方です。 また、<T>Lazyのオーバーロード関数Lazy<T> (Func)を使って、<T>レイジー初期化オブジェクトのプロパティ値を設定するためにリターン値付きのデリゲートを渡すこともできます。

ラン結果:



注意:レイジー<T>オブジェクトの初期化はデフォルトでスレッドセーフであり、マルチスレッド環境では、<T>レイジーオブジェクトのValueプロパティに最初にアクセスしたスレッドがレイジーオブジェクトを初期化し<T>、その後のアクセススレッドは初めて初期化されたデータを使用します。

4. 応用シナリオ

多くのオーバーヘッドを伴うオブジェクトがあり、プログラムがそれを使わないかもしれません。 例えば、プログラムが起動時に複数のオブジェクトインスタンスを読み込むが、すぐに実行すべきインスタンスはごく少数だとします。 不要なオブジェクトの初期化を必要なオブジェクトが作成された後まで遅らせることで、プログラムの起動性能を向上させることができます。






先の:インタビューに関するいくつかの真実を明かします
次に:JCSHELLテストツールのユーザーマニュアル
掲載地 2019/06/18 18:18:32 |
わかった
 地主| 掲載地 2023/07/04 19:19:55 |
C#の怠惰がスレッドを安全に保つ方法
https://www.itsvse.com/thread-10621-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com