.NET

検索パスを追加した新しいAppDomain

アセンブリ検索パスを追加した新しいAppDomainを作成・実行するサンプル。 using System; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main() { AppDomain currentDomain = AppDomain.CurrentDomain; Console.Wr…

スレッドの同期

CLRのスレッド同期メカニズムは、Win32のスレッド同期メカニズムのオブジェクトラッパーにすぎない。 volatile read メインメモリから読み取りをおこなうことを強制(CPUキャッシュ無効化) CPUキャッシュ対策 マルチコアCPU下でCPUキャッシュを使用すると、複…

非同期処理

スレッド オーバーヘッド 1MBのアドレス空間をユーザーモードのスタックに予約される 実行コンテキストを持つ セキュリティ ローカライゼーション トランザクション コンテキストスイッチ スレッド切換 カーネルモードに入る CPUレジストリをスレッドカーネ…

自動メモリ管理

newobj命令 バイト数計算(型・フィールド) バイト数にオーバーヘッド領域(型オブジェクトポインタ・同期ブロックインデックス)を加で必要となる分を加算 8バイト(64ビットアプリケーションなら16バイト) 予約領域を確認 確保できるならNextObjPtrが指すアド…

Thread.Abort呼出

Thread.Abortは非同期的に動作する。 Thread.Abort呼出 スレッドにAbortRequestedフラグを設定して制御を戻す。 スレッド強制終了を検出した際、CLRはスレッドを「安全な場所」に置く。 スリープ・待機などのブロック処理をおこなっている場合、安全な場所に…

コンストラクタ・イベント

コンストラクタ インスタンスコンストラクタ .ctor 参照型の場合、引数なしのコンストラクタは自動的に生成される インライン初期化したフィールドは、コンパイル時にインスタンスコンストラクタコードに自動変換される。 コンストラクタの数だけ重複した初…

メソッド呼び出しとIL命令

「プログラミング .NET Framework 第2版」を読んでいます。 メソッド呼び出しとIL命令 メソッド呼び出しはILコードにおいてcall命令かcallvert命令に変換される。 call命令 static・インスタンス・仮想 変数を指定する nullはないことを想定 仮想メソッドを…

CLRのガベージコレクション

「プログラミング .NET Framework 第2版」片手に、ガベージコレクションについて。 ジェネレーション CLRのガベージコレクションはジェネレーションで管理される。 ジェネレーションは以下三つの考え方に基づいている オブジェクトが新しいほど、その寿命は…