Reflectorを使用していると、多くの場合、安全でないコードがたくさんあります。 .NETのどれが管理されていない/安全であるかは誰でも知っていますか?.NETのどれが管理されていないのですか?
答えて
安全でない呼び出しが対応する.NETオブジェクトによってラップされるので、実際には問題ありません。あなたが気にする必要があるのは、リソースの割り当てとIDisposableを実装するオブジェクトの処分です。
Win32 APIを呼び出すだけのPInvokeのインスタンスがたくさんあります。ただし、CLR自体に実装されている機能がいくつかあります(たとえば、インターロック操作)。これがどのように行われているか見たい場合はRotorを見てください。
私のブログには、ロックの詳細な説明(ロータのソースを表示)がthis postにあります。
具体的に質問に答えるには、.NETソースコードをすべて取得する必要があります(たとえば、「InternalCall」または「DllImport」と言う行にはNetMassDownloaderとgrepを使用してください)、すべての行の数と比較してください。おそらく、これらの「管理されていない」行に何らかの要因を掛けて推測するか、実際の数値を得るためにRotorやWindowsのソースコードに飛び込まなければならないかもしれません。これを遠くにすると事態が曖昧になります(たとえば、File.OpenがWin32のCreateFileを呼び出すと、CreateFileを.NETに数える必要がありますか?)だから、せいぜい、 "InternalCall"に何らかの要因を乗じて推測するだけです。
NetMDはかなり面白いです。 –
System.Windows.Formsの多くはアンマネージウィンドウAPIを呼び出しますが、この名前空間で作成したオブジェクトを手動で破棄する必要はありません。
System.IO.FileStreamクラス(アンマネージコードも呼び出す)を使用する場合は、終了時にDisposeを呼び出して、ファイナライザが実行される代わりにファイルが閉じられることを保証してください。
オブジェクトにIDisposableを実装する理由があります。問題は見えないかもしれませんが、オブジェクトを処分していない場合はおそらくメモリリークがありますが、 –
これは本当に難しい質問です。安全でないコードはバイナリに存在し、IL命令の観点から測定できるという意味で定量化が容易です。
実際の管理されていないコード、たとえばPInvokeまたはCOMはバイナリにコードを持っていますが、それは重要ではありません。これは、ネイティブ関数を呼び出すために必要な最小限のスタブを表します。これは、管理されたDLLでネイティブコードがどの程度エクササイズされているかを実際に測定できないことを意味します。あなたが行うことができるのは、管理されていないコードがどれだけ実行されているかの実際の尺度を提供しない呼び出しの数を測定することです。
- 1. .NETのSerialPortは管理されていないリソースですか?ラップされたクラスは正しいですか?
- 2. 管理されたコードでのMarshalAsクエリ管理されていない
- 3. Java管理されていないメモリストリーム
- 4. java.lang.IllegalArgumentException:管理されていないタイプ
- 5. 管理対象のC#で管理されていない無料のCコードメモリ
- 6. sbtコンパイルで管理されていないリソースがクラスパスにコピーされないのはなぜですか?
- 7. Silverlightで管理されていないコードを整理する
- 8. 管理されていないヒープから管理されたヒープのデータを取得する
- 9. Visual C++で管理されていないコードから管理されたフォームを更新する
- 10. 管理対象アプリケーションで管理されていないメモリリークを検出する
- 11. C++/CLIで管理クラス内の非管理対象に管理されていないポインタを渡す
- 12. C++/CLI:管理されていない列挙型から管理された列挙型へのキャスト
- 13. 管理されていない環境でのHibernate
- 14. バージョン管理されたファイルをバージョン管理されていないファイルに置き換えてください。
- 15. .NETタイプと管理されていないメモリ効率のシリアル化されたサイズの決定
- 16. 管理されていない管理オプション:パフォーマンスに関する考慮事項
- 17. C#で管理されていない変数をマーシャリングする
- 18. WinPEで管理されているコード
- 19. バージョン管理されていない多対1の関係を持つオプティミスティックロックのバージョン管理されたエンティティ
- 20. _defaultUserObjectStoreがリフレッシュされていないmuleキャッシュ管理対象オブジェクトストア
- 21. Webのどの部分で管理されているHTTPステータスコードですか?
- 22. なぜpimcoreフォルダが作者によって無視されて管理されないのですか
- 23. gitハードリセットでバージョン管理されていないファイルが失われました
- 24. In App課金管理された状態と製品の管理されていない状態
- 25. どのバージョン管理システムがBitrix24と統合されていますか?
- 26. COM +で.NETアセンブリが実行されている.NETランタイムはどれですか?
- 27. 認証されていないユーザーのセッション管理
- 28. ARR構成のアイコンが表示されていないIIS管理コンソール(IIS管理コンソールで
- 29. 新しいARCメモリ管理でUIViewControllerが解放されない
- 30. C#で管理されていないC++クラス
.NETのどの部分を正確に話していますか?安全でないコードを指定しない限り、コードは安全ではありません。 –
これはどのように答えることができますか?あなたはコードや何かの行で測定したいですか? –
リスト、配列クラスを見るのと同じくらいの部分です。 –