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

眺める: 54151|答える: 3

[出典] .NET/C# 反射、エミット、表現のパフォーマンステスト

[リンクをコピー]
2021年3月21日 13:23:34に投稿 | | | |
リフレクションに関する記事のレビュー:

.net/c#は反射動的実行手法を活用しています
https://www.itsvse.com/thread-4771-1-1.html

C#はリフレクションを使ってプロパティが割り当てられているかどうかを判断します
https://www.itsvse.com/thread-3045-1-1.html

C#の反射はオブジェクトプロパティのディスプレイ名を得ます
https://www.itsvse.com/thread-3219-1-1.html
EMITレビューについて:

.NET/C# エミットは動的にアセンブリを生成します
https://www.itsvse.com/thread-9597-1-1.html
まず、シンプルなオブジェクトを作成し、そのオブジェクトをインスタンス化し、emitとexpressionを使ってオブジェクトの値を読み取り修正します。そうすると、実行結果が期待通りであることがわかります。以下の図に示されています。



BenchmarkDotNetを使ったベンチマークで、テストはオブジェクト値のみを読み取り、Net472とNetCoreApp31上で動作しています。テスト結果は以下の通りです。


.NET/C#はBenchmarkDotNetを使ってコードのパフォーマンスをテストします
https://www.itsvse.com/thread-9576-1-1.html


概要:

emitとexpressionはどちらもreflectionを使うよりも効率的で、.NET 4.7.2フレームワークではemitの方がexpression実行効率より良いですが、.NET Core 3.1フレームワークではexitの方がemit実行より優れています。

もしプログラムがオブジェクトを動的に一度だけ実行するなら、リフレクションを使うことが推奨されます(結局のところ、再度カプセル化したりデリゲートを作成したりする必要はありません)。また、複数回動的にオブジェクトを実行する必要がある場合はemitやexpressionを使うのが推奨され、もちろんさらにカプセル化も必要です。

テストコードは以下の通りです:

Expressionを使ってオブジェクト値を取得する場合、エラーは次のように報告されます。

型 'System.Int32' の式は、リターン型 'System.Object' には使用できません
彼らがどう使っているのか本当にわかりません。彼らはコピー&ペーストするだけです!




先の:.NET/C# エミットは動的にアセンブリを生成します
次に:.NET CoreはgRPC HTTP(非TLS保護)アドレスエラーソリューションを呼び出します
 地主| 2025年4月28日 14:53:41に投稿 |
Expressionを使ってオブジェクトプロパティに値を割り当ててください:


コール:
 地主| 2025年4月28日 15:32:51に投稿 |
.NET/C# UnsafeAccessor を使って読み取り専用フィールドの内容を変更
https://www.itsvse.com/thread-10997-1-1.html
 地主| 2025年4月28日 15:40:57に投稿 |
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com