0

ネイティブ クラスのマネージド オブジェクトへの参照を保持するために gcroot が使用されることは知っていますが、マネージド オブジェクトをアンマネージド クラス関数内のローカル変数として使用する場合はどうでしょうか。コンパイラはこれでエラーを生成していないようですが、「適切」ですか? パフォーマンスに影響はありますか?

4

2 に答える 2

0

マネージド オブジェクト (マネージド値型の値 ( value structvalue classenum class) とマネージド参照型へのハンドル( ref struct、 ) の両方ref class) は、MSIL にコンパイルされるコード内で使用できます。

また、MSIL にコンパイルされるコードは、アンマネージ オブジェクトの一部である可能性があります (たとえば、標準 C++ 型の仮想メンバー関数を MSIL にコンパイルでき、Visual C++ コンパイラの "It Just Works" テクノロジにより、v-テーブルが正しく設定されている)。これは、標準 C++ コードによって生成されたイベントとコールバックをマネージ GUI ワールドに転送する場合に非常に便利です。ただし、C++ から呼び出したいマネージ コード (おそらく C#) にアルゴリズムが実装されている場合にも適用できます。

Hans が言及しているように、特定の機能について MSIL とマシン コード生成を切り替えると、パフォーマンスに影響があります。ただし、ネイティブ管理の境界に座っている場合は、MSIL にコンパイルし、「It Just Works」または「C++ 相互運用」を使用することが、最高のパフォーマンスの代替手段です。

于 2013-07-31T13:42:52.403 に答える