第8回c#ユーザー会-AppDomain
-
Upload
kazushi-kamegawa -
Category
Technology
-
view
1.423 -
download
1
description
Transcript of 第8回c#ユーザー会-AppDomain
kkamegawa(かめがわ かずし):@kkamegawa
http://d.hatena.ne.jp/kkamegawa
かめがわ かずし
某企業でフロントエンドからバックエンドまで手広くいろんなことやってます
最近は@ITでチューニングやらデバッガやら比較的ニッチなところを書いています。http://www.atmarkit.co.jp/fdotnet/chushin/vsperf_index/index.html アプリケーションのギアを上げよう http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_index/index.html Visual Studioデバッグ手法
知っているようで知らない?
長ったらしく書くとApplication Domain。
マネージプロセスが必ず一つ持ち、多く作れます。
最初の一つ以外いつでも削除できます。
いくつかの例外を除いて、ドメインごとにアセンブリを管理します。
作ったAppDomainを削除すると、ドメイン内で呼び出しているアセンブリも一緒にアンロードされます。
ローダーヒープ
AppDomain #1(既定)
Hoo.exe
Bar1.dll
System.dll
ローダーヒープ
AppDomain #2
Bar1.dll
Bar2.dll
System.dll
ドメイン中立アセンブリ
ローダーヒープ MSCorLib.dll
必要に応じてAppDomainを作成
(普通は既定の一つでいい
名前は自分で考えよう)
MSCorEE.DLL /
MSCorEEi.DLL
(shim)
.NET Framework 4
CLR.DLL
.NET Framework 2.0/3.0/3.5
MSCorWks.DLL
AppDomain.Unload (AppDomain.CurrentDomain); で終わらせようとするとどうなる?
CannotAppDomainUnloadExceptionがスローされる
(ま、普通やりませんよね)
AppDomainってどのくらい作れる?
メモリへのインパクトは?
1000個のAppDomain作成/消去
(ドメイン固有のアセンブリ呼び出しはなし)
作成はあまり時間かからないが、消去は結構かかっている
Loader Heap, Working Set, Private
bytesはAppDomainを消去してもそれなりに。
Loader Heapは適当なところでGCが発生
http://support.microsoft.com/kb/979744/j
a (パッチあり)
.NET Framework 2.0 ベースの Multi-
AppDomain アプリケーションを実行したときにアプリケーションが応答しなくなる
普通やりませんが…
All-In-One-Code-FrameworkにあるCppHostCLRというソリューションがサンプル
http://1code.codeplex.com/
ICorRuntimeHost, ICLRRuntimeHostを使用したサンプル。ただし、どちらもCLR2以降しかロードできない
(今更.NET 1.1のホスティングいらないよね?)
CLRCreateInstance
ICLRMetaHost->GetRuntime()
ICLRRuntimeInfo->IsLoadable()
ICLRRuntimeInfo->GetInferface()
ICorRuntimeHost->Start()
CLRの開始まではそんなに難しくない
アンマネージドからマネージのインスタンスメソッドを呼び出そうとすると結構大変。
staticメソッド呼ぶだけならICLRRuntimeHost->
ExecuteInDefaultAppDomain()でOK
お仕事であるいは趣味で「.NETのこのクラスライブラリ使いたい」と思ったときはどうぞ
Internet Explorer
IIS
IIS6まではWorker ProcessがCLRをホストしていました。
IIS7以降の統合モードではIIS自身がホストします。クラッシックモードではWorker Processが使われます。
SQL Server 2005以降(SQLCLRがある)。
PowerShell
たぶん99.9%の人は複数ドメイン作らなくてもやっていけます。昔はプラグインのために使うこともありましたが、今はMEFがありますし。
そして、CLRのホストは99.999%くらいの人は知らなくてもやっていけるかと思います。
ここもMCPの試験範囲なので出ますよ。
2nd時代にこの本だけ読んでMCP受けました。
プログラミング.NET Framework 第二版
プログラミング.NET Framework 第三版
Root of .NET Framework
MSDN Library(ホストの概要) http://msdn.microsoft.com/ja-jp/library/dd380850.aspx
MSDN Library(アプリケーションドメイン) http://msdn.microsoft.com/ja-jp/library/2bh4z9hs.aspx