| 2003年12月11日
『どっとねっとと雑多な日々 17』
さて、今回は復習の意味をこめて、.NET Framework のコーディングについて書きたいと思います。
.NET Framework はさまざまな言語でコーディングしても、生成される Assembly は共通で、実行するときにはほとんど差がないということはご存知のとおりです。
ですので、どの言語でコーディングをするかは開発者のスキルにあわせて選択することが可能になっています。特に、VB を利用されていた方はそのまま
VB.NET を使っていることでしょう。
ただし、言語の実装に差があるため、100 % 同じものができないということを留意してください。
前振りはこのぐらいで、本題に入りましょう。
.NET Framework ではガベージコレクションが実装されたために、プログラマがリソースの開放から開放されたといわれています。
実際はどうでしょう?
.NET Framework 上のマネージドな世界においては開放されたといえる部分がありますが、アンマネージドな世界が絡むとそれは否です。アンマネージドな世界が絡まないケースにおいても当てはまるケースがあります。
Wndows Forms な世界は実際アンマネージドな世界とやり取りを行っている関係で、明示的にオブジェクトの開放が必要になってきます。
このような場合にはどのような対応が必要なのか?という疑問には Dispose メソッドを呼び出すということになります。
単純に Dispose を呼び出すだけだとまずいケースもありますので、次の法則をおぼえてください。
1.Open したら Close
2.Close したら Dispose
C# 限定でしたら、 using を使ってシンタクスシュガーを享受してください。
※ using したら、自動的に finally でオブジェクトの開放処理をコンパイラが生成してくれるので、ケアレスミスや開放忘れを防ぐことが可能。
もし、皆さんが .NET Framework のコーディングを行っているのでしたら、オブジェクトのメソッドの中に Dispose
がある確認してみてください。Dispose がある場合は、必ず Dispose を呼び出すコーディングをすることをお勧めします。
SQL Server で利用する System.Data.SqlClient のオブジェクトに .NET Framework
1.1 で多数 Dispose が実装されているので、ぜひとも活用してください。これで、思わぬところでのメモリリークというのは開放されると思います。
最後に、ガベージコレクションを下手にプログラムから操作すると、GC の世代があがり回収されにくくなりますので、あまり多用は禁物です。
|