過去雑記

旧鯖時代の雑記です。新しいの。リンク切れに注意。


2007: 12345678910
2006: 123456789101112
2005: 123456789101112
2004: 456789101112

過去雑記

2007/2/2(金)

Control.DefaultFontはGetStockObject()のものを使用(たぶん)02:32:47

前にControl.DefaultFontはユーザー設定が適用されるとか書いたと思いますが、そんなことはありませんでした。なにをかんちがいしたのやら。MS UI ゴシックが選択されているところを見るとたぶんGetStockObject()からとってきてるのでしょう。SystemFonts.DeflatFontも同様。ただSystemFontsのほかのメンバはちゃんとユーザー設定が適用されるようです。

コメントはありません。

Vista一般発売02:41:16

なんだかんだで一般発売されたらしいですね。早いものです。とりあえず私は前向きに導入を検討しつつ、開発環境とアンチウィルスの対応を待ち。それ以外は大体対応してますし。問題はどこに突っ込むか。ノートに入れれば最低限動くのですけど、ドライバが提供されなさそうなんですよね。RC1突っ込んででみて大体問題はなかったのですが、キーボードとマウスドライバは欲しいかなと。デスクトップはビデオカードがスペック不足だと思われるのでたぶん無理です。

コメントはありません。

2007/2/11(日)

リソース管理21:56:44

ゲームなんかだと描画を担当するクラスは非常に多くのリソースを持つことになるわけです。で、これが大抵IDisposableを継承しているわけですね。だったらちゃんと開放してあげないとまずいだろう、てことでDispose()を呼び出すわけですが、これがめんどくさい。私はListに突っ込んでおいてforeachでまとめて解放というのをよく使ってるのですが、これも数が増え限界が見えてきました。コンストラクタの半分くらいがList.Addって何さ。そこで、新しくリフレクションを使ってIDisposableを継承しているフィールドを検索して解放するというのを考えてみました。これなら確実に解放できます。でも処理効率とか考えるとやっぱだめですかねぇ。

コメントはありません。

2007/2/22(木)

そんなわけでフィールド自動Dispose()クラスを作ってみた02:23:52

Dispose()が呼ばれると全てのフィールドのIDisposable.Dispose()を呼び出します。これで解放忘れも心配なし。ただし、全部のフィールドが対象なので解放しちゃいけないインスタンスがある場合でも、もれなく解放しちゃいます。注意。

class AutoDisposable : IDisposable {
    ‾AutoDisposable() { this.Dispose(false); }
    public void Dispose() { this.Dispose(true); }
    protected virtual void Dispose(bool disposing) {
        lock(this) {
            if(disposing) {
                Type type = this.GetType();
                do {
                    foreach(FieldInfo fi in type.GetFields(
                        BindingFlags.Instance | BindingFlags.Public
                        | BindingFlags.NonPublic))
                        if(typeof(IDisposable).IsAssignableFrom(fi.FieldType)) {
                            IDisposable d = fi.GetValue(this) as IDisposable;
                            if(d != null)
                                d.Dispose();
                        }
                } while(!(type = type.BaseType).Equals(typeof(object)));
            }
        }
    }
}

コメントはありません。

goto Top

Copyright(C)方位記号