4

Windows 8 for .NET開発者セッションで見たように、.NETはプラットフォームのネイティブオブジェクトを扱います。そして、これらのオブジェクトはポインターカウンターをサポートします。マネージヒープにあるマネージオブジェクトとアンマネージオブジェクトがあり、finalizeメソッドとdisposeメソッドでリリースする必要があることは明らかでした。今のところ、Windowsランタイムでメモリ管理をどのように処理すればよいかわかりません。管理対象/非管理対象のリソースについて心配する必要がある場合、アドバイスをいただけますか?また、アプリのリソースリークを防ぐために、Windowsランタイムでメモリ管理はどのように機能しますか?

UPD:

つまり、.NETメトロプロファイル

4

1 に答える 1

4

基盤となるWinRTインターフェイスはCOMベースです。すべてのWinRTインターフェイスはIUnknownから派生し、そのAddRefメソッドとReleaseメソッドは参照カウントベースのメモリ管理を実装します。

ただし、これは非常によく隠されています。WinRTアプリをプログラムするときは、言語プロジェクションを使用します。.NETアプリとJavascriptアプリの場合、言語プロジェクションはそれぞれCLRとChakraエンジンに組み込まれています。実装の詳細を完全に隠すWinRTインターフェイスは、ネイティブ言語の構成にマップされます。COMがジェネリックスと実装の継承をサポートしているという幻想を巧みに作成することを含みます。ある程度合理的な推測では、CLRプロジェクションはCLRにすでに組み込まれているCOM相互運用機能を使用していますが、これを簡単にリバースエンジニアリングすることは不可能です。それがまったく正確である場合、ファイナライザーはIUnknown :: Release()呼び出しを行う可能性があります。

現在、低レベルの詳細について適切な情報を取得することは非常に困難です。MicrosoftのブロガーとSOのポスターは話していません。ソースコードは利用できず、このように主題に触れる質問は締め切られています。

その質問に対する陳のコメントからわかるように、あなたはそれについて好奇心をそそられるべきではありません。心配な場合は、C ++/CXでのプログラミングを検討してください。これは接着剤を隠すのに良い仕事をします。または、WRLライブラリを備えたネイティブC ++は、そうではありません。メモリ管理が明示的である両方のランタイム環境。Microsoftは、C++プログラミングを再び適切なものにするために多くのリソースを投資しました。

于 2012-09-01T16:24:16.810 に答える