.NET Framework における比較的特徴的な動作としてボックス化が挙げられます。これは、Java でもそうですが値型と参照型という根本的に異なる型が存在するためです。参照型が値そのものは変数そのものとは独立した場所にあるのに対し、値型は変数内に値そのものがあります。ただ言うまでもなく、値型を参照型に型変換する必要が生じます。そのため、.NET Framework の場合は自動ボックス化が働き、ヒープ上に領域を確保し、そこにデータをコピーするという動作が働きます。しかし、これがループ内などで頻繁に起きたりするとパフォーマンスにネガティブな影響を与えます。Java も 1.5 系列からは自動ボックス化が導入されているのでその辺に注意が要るかなと思います。
で、そういった背景から Box 化確認ツールがいくつか作られているようです。一つは当面 C# と .NET な記録の2006/11/8 のエントリです。これは 1 年くらい前のアーティクルです。それ以外にも最近だと NyaRuRu の日記の "boxing チェッカー"なんかもあります。ポイントは同じで基本的には隠れたボックス化を見つけだすことにあります。ボックス化に関する警鐘はこの記事では Jeffery Richter に書かれているとあるので恐らく、プログラミング Microsoft .NET Framework のことでしょう。欲しい本なんですけど、ちょっと値が張るんですよね。
まあ、NyaRuRu さんのアーティクルは XNA のタグが振られておりターゲットに XNA Framework が入っているのでボックス化のもたらすパフォーマンスの悪化は非常に大きなポイントでしょう。もちろん、ボックス化そのものは非常に便利な機能です。これのおかげで値型と参照型を区別せずに扱えるという強力なベネフィットがありますから。ただ、根本的に違う型ですから便利さにかまけているとその暗黒面に足を取られるということです。
![]() | プログラミングMicrosoft .NET Framework 第2版 (マイクロソフト公式解説書) ジェフリー リッチャー Jeffrey Richter 吉松 史彰 日経BPソフトプレス 2006-12 売り上げランキング : 65445 Amazonで詳しく見る by G-Tools |



コメントする