興味深い問題:アプリケーションの安定性(堅牢性)を高める

私たちは、Microsoftとそのテクノロジーについて正しい世論を形成するための企業計画を練り続けています:)時間はこんな感じです。



だから、ここにあなたのための技術的な問題があります。 私が知る限り、リヒターでさえ彼女の説明がありませんでした。 私は、コンピュータに座る「最小のものを選択する」機会がありますが、今のところは条件が整った後、決定自体に来ることを望みます。



ご存じのとおり 、.Netは、ネイティブコードおよびCOMとの深い相互作用の可能性を考慮して設計されました。 これが技術的な解決策であるか政治的な解決策であるかは今はわかりません。重要なことは、アンマネージコードとのやり取りは難しい問題であり、開発者が期待していなかった多くの血を流すことができるということです。 提案されたタスクはこれらの1つです。



UPD:ソリューションはこちら: habrahabr.ru/blogs/net/69650







次のコードを想像してください:



IntPtr ptr = Marshal.AllocHGlobal(500); // exception

try

{

// -

}

finally

{

Marshall.FreeHGlobal(ptr);

}




このコードは、一部(500バイト)のアンマネージメモリを割り当てます。 さて、それを目立たせて、それ自体で目立たせてください、それで何ですか?



そして、これは何ですか



このコードが別のスレッドで実行されると想像してください。 また、メモリ割り当てが既に発生した時点で 、アンマネージメモリの選択領域へのポインタがIntPtr変数にコピーされる前に、スレッドはThreadAbortExceptionによって中断されました。 割り当てられたアンマネージメモリはプロセスでハングし、プロセスの終了時にのみ解放されます。 これは短命のスクリプトでは問題になりませんが、長寿命のアプリケーション(アプリケーションサーバー、サービス、その他のミッションクリティカルなソフトウェア)の開発者の生活を台無しにします。



この問題をどのように解決しますか? そして、解決策はありますか? 「これは非常にありそうもないので、それについて考えない」という議論を持つ懐疑論者は失望します-機会があれば、それは確かに実現します。 これが本番環境でのみ発生する場合は非常に悲しいでしょう。 書き込み、私はすぐにコメントに応答しようとします:)



All Articles