.NET Framework のリソース開放基礎(2)
.NET Frameworkのリソース開放は非常に難解です。
今回は重要メソッドである以下の2つについて説明します。
・Dispose(リソースを開放できるメソッド、自動で呼ばれることはない)
・Finalize(リソースを何時か開放するメソッド、自動で呼ばれる)
05:08 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
.NET Frameworkのリソース開放は非常に難解です。
今回は重要メソッドである以下の2つについて説明します。
・Dispose(リソースを開放できるメソッド、自動で呼ばれることはない)
・Finalize(リソースを何時か開放するメソッド、自動で呼ばれる)
05:08 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
ガベージコレクタがあるからリソースの開放は不要、という説は間違いです。
ガベージコレクタが開放できるのは、.NET FrameworkのランタイムであるCLRが管理しているものですが、.NET Frameworkの内部ではCLRが管理しないリソースも呼び出せるからです。
その他、ガベージコレクタが苦手とするパターンも多々存在するわけで・・・
12:29 午前 .NET | 固定リンク | コメント (0) | トラックバック (0)
MSILなコードを高速化する手段の1つとしてネイティブコードジェネレータ(ngen)があります。
その名のとおり、MSILをx86等に予めコンパイルしてキャッシュしておくわけですが、何故か.NET Framework 1.1と2.0では引数が異なるのです。
12:26 午前 .NET | 固定リンク | コメント (0) | トラックバック (0)
Disposeの役目はなんでしょうか?マニュアルを見ても良く書かれてないように思います。ここでは、一般的な解釈を述べます。
.NET Framework 全体で考え方が統一されているかは別として、Disposeという言葉を聞くようになったのは、ガベージコレクタを使った言語です。
まずはDisposeの英語としての意味をおさらいしましょう。ここでは「処分する」が適切です。使わなくなったオブジェクトは「処分する」必要があります。じゃあ、ガベージコレクタは、何時処分すればいいのでしょうか?
そのヒントを与えるメソッドがDisposeです。
10:26 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
私が他人のC++/CLIのソースを見ているときに気になる事があります。
何故この人は、同じクラス内からメンバ変数を参照するときにプロパティを経由するんだろう、と。
MSDNにも書かれているように、プロパティへのアクセスは一般的に高価になります。
01:41 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
納期がギリギリでも高速化しなくてはならないことがあります。
そんな時に役に立つ、ソースを変更せずにコンパイル時や実行時の設定だけで高速化する方法を紹介します。
09:40 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
Windowsにおいて、アセンブリはDLLで実装されています。
マネージドアプリ(EXE)からアセンブリ(DLL)を読み込む場合、一般的なWin32アプリケーションがEXEファイルからDLLを探索する手順とは異なるルールを採用しています。
09:22 午後 .NET | 固定リンク | コメント (0) | トラックバック (0)
「.NET Framework」と「Win32API」を混ぜて作成した、Win32形式のDLLを混在DLLと呼びます。
Visual C++ .NET 2003で作成できますが、単純にエントリポイント(DLLMain)を実装する事は禁止されています。何が起こるかというと循環参照による無限ループの可能性です。なお、この問題はVisual C++ 2005で若干改善されました。
05:02 午後 .NET | 固定リンク | コメント (2) | トラックバック (0)
.NETのオブジェクトには、値型と参照型があり、値型はスタックに、参照型はヒープに存在します。
BOX化(Boxing)を行うと、値型を参照型に変換する事が出来ます。つまり、ヒープ(※1)にオブジェクトをコピーする事をBOX化といいます。反対にBOX化解除(unboxing)とは参照型を値型に変換する事です。
一般的な言語(C#やVB.NET)では、マネージドヒープの値を直接変更できないので、BOX化を考える(※2)事は高速なアプリを作成する第一歩と言えます。
※1 .NETが管理するヒープを特にマネージドヒープと呼びます。小さなオブジェクトを沢山作成する事に最適化されています。
※2 C#やVBは文脈をみて勝手にBOX化します。対してMC++は明示的にBOX化する必要があります。MC++以外でBOX化を意識することは難しいかもしれません。
12:46 午前 .NET | 固定リンク | コメント (0) | トラックバック (0)