Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

Dispose…どうする?

Brushが必要になったので作った。


Brush brush = new SolidBrush(color);

ところが、colorはシステムカラーである場合が多いことに気がついた。
SystemColorsの説明には、「パフォーマンスを向上させるには、SystemColorsの値を使用して新しいブラシを作成するのではなく、SystemBrushesクラスのプロパティを使用します」とある。
そこで、こうした。


Brush brush = null;
if( color.IsSystemColor )
{
    brush = SystemBrushes.FromSystemColor(color);
}
else
{
    brush = new SolidBrush(color);
}

Brushは使い終わったらDisposeせねばならん。
そこで、こうした。


Brush CreateOptimizedBrush(Color color)
{
    Brush brush = null;
    if( color.IsSystemColor )
    {
        brush = SystemBrushes.FromSystemColor(color);
    }
    else
    {
        brush = new SolidBrush(color);
    }
    return brush;
}
using( Brush brush = CreateOptimizedBrush(color))
{
    // brushを使って描画する
}

そしたら死んだ。

原因は確かめられなかったが、おそらく、システムブラシをDisposeしようとしたためであろう。
Win32 APIでは、GetStockObjectで取得したブラシをDeleteObjectしても大丈夫と保証されていたが…お粗末なものよ。

こういうケース、どうしたらうまくできる?

投稿日時 : 2007年1月4日 20:11

Feedback

# Dispose…どうする?(その2) 2007/01/05 11:00 .COM -どっとこむ-

Dispose…どうする?(その2)

# シャネルサングラスコピー 2017/09/30 12:29 tmsvcn@ocn.ne.jp

迅速かつ丁寧な対応をありがとうございました!
★ルイヴィトン★モノグラム★モンスリMM★リュック★M51136★120615002★
画像より小さく感じました。けっこう重たいです。

タイトル
名前
Url
コメント