2006/3/28 Tue

C#その後

Filed under: 雑記 — nico @ 21:50:03

C#も色々触って色々見えてきた感じですが、なんか一点すんげー我慢ならん点が出てきて、もう見限ろうかどーしよーか、悩んでたりします。

メモリの確保にnewって命令があるんですが、逆の解放が無い・・・orz
いや、「無い」ってのは御幣があるな。
一応、「ガベージ・コレクション」なる機構がメモリの使用状況判断して、不要になってたら「いつか」解放するって事らしいんですが。

でも、「今、この瞬間に解放しろ」って命令、何処にも無いし許されても無いらしい・・・orz
なんでも、ガベージコレクタが任意のタイミングで解放するほうが、毎回解放するよりも効率が良いからって事らしーんですが。

いやさ、自分が「allocしたらfreeする!」って考えに固執した古い人間なのかも知れないけど、使ったら片付けるのが基本なんじゃねーのか?とw
自動で解放を制御する機構が駄目とは言わんけど、ソレしか選択肢が無いっつーのも如何なもんよ。

今、特に困ってるのが「オブジェクトが確実に破棄されたことを確認したい」んだけど、ガベージコレクションのお陰で全然確認できないんだよね。
ガベージコレクションはメモリが何かしら参照されてると、削除対象にしないんだけど。そのせいで本当は解放して欲しいのに、何かのゴミ参照が残ってて解放されないってケースがどーあがいても潰せねぇよ、コレ;;

Javaがもともとこの機構でメモリ管理してて、C#は若干そのJavaの動作を改善はしてるらしーんだけど。

ガベージコレクションよ。
お前が守ってるその領域、プログラムの製作者の意図どおり確保され続けてるのか、事故で確保され続けてしまっているのか、お前に判断できてるのか?;;

コメント (2) »

  1. ふむふむ。
    確かにJavaはそういう管理ですなぁ。
    インスタンスが使い回されてなければ、関連する入れ物すべての中身をヌルに入れ替えればいいと思ってたんだけど、そんな簡単には行かないのね。

    あー、もうプログラマは廃業したので、その先は考えないことにします(笑)。
    ちょっとしたツールくらいなら興味あるんだけどね。

    コメント by るしゃな — 2006/3/30 Thu @ 23:57:14

  2. >インスタンスが使い回されてなければ、関連する入れ物すべての中身をヌルに入れ替えればいいと思ってたんだけど、そんな簡単には行かないのね。
    まぁ、理想はそうなんですが、コレが一度VC#とかの統合開発環境になったりすると、人間が手動でコード書いた以外の部分でも、自動生成されたコードが参照してたりと、
    「完全に消して回る」
    ってのが結構大変な作業だったりするんですよねぇ(汗)
    まして、開発環境の一部として提供されてるライブラリが自動で使われたりすると、そのライブラリの中身はブラックボックスなので、もはや完全に把握して追っかけるのは不可能だったりw
    でまー、実はその後、「Dispose」呼べばいいんじゃね?みたいな流れになってるんだけどね(汗)<C#の強制解放
    ただ、Dispose呼んじゃうとデストラクタ呼ばれなくてホントに解放されてるのやら、されてないのやら(滝汗)

    コメント by にこ — 2006/3/31 Fri @ 2:13:28

コメント RSS トラックバック URL

コメントをどうぞ

Link Free. Copyright (C) 2005-2007 nico. All rights reserved.
HTML convert time: 0.476 sec. Powered by WordPress ME