◀ANSI版開発トップへ
  • 1040 CShareDataをSingleton
    • 1041 Re:CShareDataをSingleton
      • 1110 Re2:CShareDataをSingleton
        • 1111 Re3:CShareDataをSingleton
          • 1350 Re4:CShareDataをSingleton
            • 1352 Re5:CShareDataをSingleton
            • 1356 ウィンドウ分割
    • 1043 Re:CShareDataをSingleton
      • 1044 Re2:CShareDataをSingleton
        • 1054 Re3:CShareDataをSingleton
          • 1067 Re4:CShareDataをSingleton
            • 1070 Re5:CShareDataをSingleton
              • 1071 Re6:CShareDataをSingleton
  • [1040] CShareDataをSingleton やざき 2001年12月29日 00:04

    やざき@Singleton好きです。

    CShareDataをSingletonにすると、
    使用メモリが600KBくらい減りますけど、
    取り込みますか? > all
    • [1041] Re:CShareDataをSingleton やざき 2001年12月29日 00:08

      ▼ やざきさん
      > やざき@Singleton好きです。
      >
      > CShareDataをSingletonにすると、
      > 使用メモリが600KBくらい減りますけど、
      > 取り込みますか? > all

      600KBは、編集ウィンドウのほう。タスクトレイのほうは
      それほどかわらずです。


      Singletonは、下のようなstaticなメンバ関数を作って、
      必要なところでは、
      CShareData* pcShareData = CShareData::getInstance();
      とします。

      CShareData* CShareData::getInstance()
      {
      if (_instance){
      return _instance;
      }
      _instance = new CShareData;
      if( !_instance->Init() ){
      // 適切なデータを得られなかった
      return NULL;
      }
      return _instance;
      }

      で、コンストラクタと、デストラクタをprotectedにし、
      好き勝手にnewしたり、CShareData cShareData;などと
      できないようにします。

      そもそもは、CShareDataのm_tbMyButtonがいろんなところで
      領域確保されてるのが無駄だと思ったので、上記のようなことを
      してみたのです。

      コメント歓迎です。
      • [1110] Re2:CShareDataをSingleton あろか 2002年01月08日 23:07

        ▼ やざきさん
        > ▼ やざきさん
        > > やざき@Singleton好きです。
        > >
        > > CShareDataをSingletonにすると、
        > > 使用メモリが600KBくらい減りますけど、
        > > 取り込みますか? > all
        >
        > 600KBは、編集ウィンドウのほう。タスクトレイのほうは
        > それほどかわらずです。

        > コメント歓迎です。
        ウィンドウを一杯開くとメモリが足りなくなることが多いので使用メモリが減るのは歓迎します。
        ところでリソース使用量はへるのでしょうか?
        • [1111] Re3:CShareDataをSingleton やざき 2002年01月08日 23:29

          ▼ あろかさん
          > ▼ やざきさん
          > > ▼ やざきさん
          > > > やざき@Singleton好きです。
          > > >
          > > > CShareDataをSingletonにすると、
          > > > 使用メモリが600KBくらい減りますけど、
          > > > 取り込みますか? > all
          > >
          > > 600KBは、編集ウィンドウのほう。タスクトレイのほうは
          > > それほどかわらずです。
          >
          > > コメント歓迎です。
          > ウィンドウを一杯開くとメモリが足りなくなることが多いので使用メモリが減るのは歓迎します。
          > ところでリソース使用量はへるのでしょうか?

          メモリを減らす需要はありますよねぇ。
          いま最新のソースでは、無駄を省いて若干メモリ使用量を減らして、必要なところを付け足して若干増えて、結果、微減ってとこですかね。

          CShareDataは、CEditAppや、CEditWndに生成・開放させて、そのポインタだけグローバルな変数にコピーして
          それを使いまわすようにしたらわかりやすいかしらんと最近は思ってます。
          命名するならg_pShareDataです。

          CShareDataをダイエットしても、リソース使用量は減らないと思います。
          残念ながら。。。

          ウィンドウ4分割機能を廃止すれば、リソース使用量が減りそうな気がしますけど、どう? > all
          • [1350] Re4:CShareDataをSingleton あろか 2002年01月27日 01:25

            ▼ やざきさん
            > やざき@Singleton好きです。
            >
            > CShareDataをSingletonにすると、
            > 使用メモリが600KBくらい減りますけど、
            > 取り込みますか? > all
            この話ってどうなったのでしょうか?
            現状だとあちこちのクラスでCCsareData.Init()を呼び出していて、それぞれで共有メモリを確保しているのでリソースに無駄が多いとおもうのですが。

            ▼ やざきさん
            > ウィンドウ4分割機能を廃止すれば、リソース使用量が減りそうな気がしますけど、どう? > all
            4分割を停止したものを作って確認したところ、リソース消費量はエディタプロセス一つあたり3-4%食っていたのが2%にへりました。思ったほど減らないなと。
            ウィンドウ分割機能はよく使うのでできれば残して欲しいです。
            • [1352] Re5:CShareDataをSingleton やざき 2002年01月27日 01:39

              ▼ あろかさん
              > ▼ やざきさん
              > > やざき@Singleton好きです。
              > >
              > > CShareDataをSingletonにすると、
              > > 使用メモリが600KBくらい減りますけど、
              > > 取り込みますか? > all
              > この話ってどうなったのでしょうか?
              > 現状だとあちこちのクラスでCCsareData.Init()を呼び出していて、それぞれで共有メモリを確保しているのでリソースに無駄が多いとおもうのですが。

              いまは手付かず。そもそもCShareDataにいなくてもいいものを取り出してお茶を濁しました。
              horさんの指摘もありますが、CShareDataにあるべきか否かを検討しつつ、Singletonにするとか、CEditWndとCEditAppにのみCSHareDataを持たせるとか、
              そういう工夫も考えられまする。


              > ▼ やざきさん
              > > ウィンドウ4分割機能を廃止すれば、リソース使用量が減りそうな気がしますけど、どう? > all
              > 4分割を停止したものを作って確認したところ、リソース消費量はエディタプロセス一つあたり3-4%食っていたのが2%にへりました。思ったほど減らないなと。
              > ウィンドウ分割機能はよく使うのでできれば残して欲しいです。

              へい。ひとまず4分割は残しておきます。
              あたくしWindows2000を使っているのですが、そもそもリソース何%くらい減るんですか?
              ってWindows2000でもリソースの減り具合って確認できるもの?
            • [1356] ウィンドウ分割 げんた 2002年01月27日 04:03

              ▼ あろかさん
              > ウィンドウ分割機能はよく使うのでできれば残して欲しいです。
              4つと決めうちじゃなくて、分割が指示されたときに動的に生成するようにするのは難しいですかね。
    • [1043] Re:CShareDataをSingleton げんた 2001年12月29日 02:24

      ▼ やざきさん
      > やざき@Singleton好きです。
      Singleton好きなやざきさんに質問。

      C++でsingletonを作ると、デストラクタがちゃんと走らないでメモリリーク状態で終了するように思うんですが、これは私の勘違いですか?
      • [1044] Re2:CShareDataをSingleton 通りすがり 2001年12月29日 05:42


        > C++でsingletonを作ると、デストラクタがちゃんと走らないでメモリリーク状態で終了するように思うんですが、これは私の勘違いですか?

        某所より転載。

        CShareData* CShareData::getInstance()
        {
        static CShareData instance;
        return instance;
        }

        で万事解決。
        • [1054] Re3:CShareDataをSingleton やざき 2001年12月29日 14:45

          Singletonは、メモリリークになる問題は随所で論議されているみたいですね。

          ▼ 通りすがりさん
          > > C++でsingletonを作ると、デストラクタがちゃんと走らないでメモリリーク状態で終了するように思うんですが、これは私の勘違いですか?
          >
          > 某所より転載。
          >
          > CShareData* CShareData::getInstance()
          > {
          > static CShareData instance;
          > return instance;
          > }
          >
          > で万事解決。

          をを、すばらしい!!ありがとうございます。手元では取り込んでおきます。
          CShareDataが開放されるときに一緒に開放される仕組みなんですよね?

          で、本編に組み込まれるかは、開発陣の判断次第ってことで。
          • [1067] Re4:CShareDataをSingleton やざき 2001年12月30日 17:49

            ▼ やざきさん
            > Singletonは、メモリリークになる問題は随所で論議されているみたいですね。
            >
            > ▼ 通りすがりさん
            > > > C++でsingletonを作ると、デストラクタがちゃんと走らないでメモリリーク状態で終了するように思うんですが、これは私の勘違いですか?
            > >
            > > 某所より転載。
            > >
            > > CShareData* CShareData::getInstance()
            > > {
            > > static CShareData instance;
            > > return instance;
            > > }
            > >
            > > で万事解決。
            >
            > をを、すばらしい!!ありがとうございます。手元では取り込んでおきます。
            > CShareDataが開放されるときに一緒に開放される仕組みなんですよね?
            >
            > で、本編に組み込まれるかは、開発陣の判断次第ってことで。

            error C2248: 'CShareData::~CShareData' : protected メンバ (クラス 'CShareData' で宣言されている)にアクセスできません。

            と出てしまた。くぅ。なぜ。
            • [1070] Re5:CShareDataをSingleton 通りすがりB 2002年01月01日 18:57

              ▼ やざきさん
              > ▼ やざきさん
              > > Singletonは、メモリリークになる問題は随所で論議されているみたいですね。
              > >
              > > ▼ 通りすがりさん
              > > > > C++でsingletonを作ると、デストラクタがちゃんと走らないでメモリリーク状態で終了するように思うんですが、これは私の勘違いですか?
              > > >
              > > > 某所より転載。
              > > >
              > > > CShareData* CShareData::getInstance()
              > > > {
              > > > static CShareData instance;
              > > > return instance;
              > > > }
              > > >
              > > > で万事解決。
              > >
              > > をを、すばらしい!!ありがとうございます。手元では取り込んでおきます。
              > > CShareDataが開放されるときに一緒に開放される仕組みなんですよね?
              > >
              > > で、本編に組み込まれるかは、開発陣の判断次第ってことで。
              >
              > error C2248: 'CShareData::~CShareData' : protected メンバ (クラス 'CShareData' で宣言されている)にアクセスできません。
              >
              > と出てしまた。くぅ。なぜ。

              デストラクタはPublicで良いのではないでしょうか。

              666
              • [1071] Re6:CShareDataをSingleton やざき 2002年01月02日 01:11

                ▼ 通りすがりBさん
                > > error C2248: 'CShareData::~CShareData' : protected メンバ (クラス 'CShareData' で宣言されている)にアクセスできません。
                > >
                > > と出てしまた。くぅ。なぜ。
                >
                > デストラクタはPublicで良いのではないでしょうか。

                あら、やっぱりそういうものなんですか。
                delete されたら困るかと思って、Publicにするのは避けてました。