Monoのネイティブ管理されたコンテキストスイッチのオーバーヘッドに関する詳細は誰でも知りましたか?つまり、.NETメソッドの呼び出し/ C APIを使用した.NETオブジェクトの作成によるオーバーヘッドです。ネイティブのマネージコンテキストスイッチのモノオーバーヘッドの埋め込み
答えて
Cコードから管理メソッドを呼び出すための現在のAPIは、オーバーヘッドのこれらの種類があります。
- それはいくつかのロックとハッシュ・ルックアップ操作を参照するにない場合は、呼び出しているメソッドと合成さヘルパーメソッド
- メソッドがネイティブコードにコンパイルされていない場合は、コンパイルされます。
- 実際のメソッドi nvocationは速く、いくつかの回答では推測に反してマーシャリングオーバーヘッドが発生しないのでblittable型などの考慮事項は適用されません
- 戻り値の型が値型の場合、値はボックス化されます。 。 voidを返すメソッドや参照型にはオーバーヘッドはありません。
上記の最初と最後のポイントでオーバーヘッドを排除する新しいAPIを紹介します。一方で、毎秒何百万通ものコールをしていない限り、これらのオーバーヘッドはかなり小さく、実際の管理を行う方法ではほとんど問題になりません。
言われていることそれはあなたがあなたの特定の状況が十分に高速であるかどうかを知っているだろう唯一の方法だからあなたは、具体的な詳細をしたいか、必要な場合はプロフィール、...
、
モノネイティブAPIにされますとても早い。 MonoのC APIを使用してオブジェクトを作成すると、オブジェクトを作成するときに管理されたランタイムと基本的に同じことが行われます。メソッドの呼び出しも同様です。
実際のオーバーヘッドは、データを渡したり、データを前後に変換しようとしています。オブジェクトを作成してメソッドを呼び出すだけで、驚くほど高速です。複数の型を使ってデータを変換しようとすると、やや遅くなります。しかし、C APIの使用は非常に高速であるため、パフォーマンス上の問題はありません。 (もちろん、非常にタイトなループやこれに類するものではない限り、ループをリファクタリングして、管理対象側のメソッドにループさせ、一度呼び出すだけで、単一のコンテキストスイッチが配置されます。 )
それは非常に関連するタイプに依存します。いくつかのタイプはblittable(つまり、CとCLRの両方で全く同じ表現)なので、マーシャリングは必要ありません。呼び出し規約に従ってCALLとスタックに引数をプッシュするだけです。弦のような他のものは、最初に反対側で予想される形状にコピーしてマッサージする必要があります。 –
はい - タイプのマーシャリングは高価な部分です。オブジェクトを作成してメソッドを呼び出すことは高速です(引数の整形を行う必要がない場合) –
恐ろしいです。その情報をありがとう。 – jameszhao00
- 1. Xamarinフォームの埋め込みまたはネイティブ埋め込み
- 2. 埋め込みドキュメントのMongodbネイティブ検証
- 3. 埋め込みブートストラップレイアウトの埋め込み
- 4. pdf埋め込み/埋め込み
- 5. mongodbへの配列の埋め込み埋め込み
- 6. ネイティブHTML5モードとフルスクリーンの埋め込みYouTube動画
- 7. Qt Creatorの埋め込み方法埋め込みPSQL
- 8. 埋め込みドキュメントの更新埋め込み
- 9. モバイルSafari、iPhone(埋め込みコールバック)の埋め込みイベント
- 10. 埋め込みプレーヤーと埋め込み用画像のコンテンツ
- 11. 埋め込みツイートのDjango埋め込みURL
- 12. 埋め込み
- 13. テンソルフロー内の複数の埋め込みからのルックアップの埋め込み
- 14. オーディオ埋め込みのカスタムミュートボタン?
- 15. 埋め込みPHPのショート
- 16. 埋め込みビデオのyoutube
- 17. .txtの埋め込み
- 18. 埋め込みリソースのファイルパス?
- 19. 埋め込みpdfのカスタムタイトル
- 20. Skinsの埋め込みフォント
- 21. アンカータグの埋め込み
- 22. C++プログラムの埋め込み
- 23. 埋め込みのcsv
- 24. .netの埋め込みデータベース
- 25. Androidスクリーンショットライブラリの埋め込み
- 26. Base64イメージの埋め込み
- 27. Quicktime埋め込みのライトボックスオーバートップ?
- 28. Pythonの埋め込み - インポートモジュール
- 29. 埋め込みIPythonのオートコンプリート
- 30. Mongoidの埋め込みクエリ
ありがとうございました。 #1の場合、グローバルインタプリタロック(Pythonで)に類似したロックですか?また、#3では、複合型(クラス、...)はどのように渡されますか? – jameszhao00
これはロックですが、PythonのGILとは関係がありません。すべてのPythonコードでGILを実行する必要があるため、その間に他のコードを実行することはできません。私が話していたロックは、基本的にハッシュ検索の間のみ保持され、残りのコードは他のコードと同時に実行できます。 複合クラスは単なる参照であり、マーシャリングが発生しないため、単なるポインタコピーです。あなたと他の人たちは、私たちがこのスレッドとP/Invokeメカニズムで話している埋め込み呼び出しAPIについて混乱しています。 – lupus
ああ、私は参照してください。ありがとう。 – jameszhao00