- PR -

MFC CString の大量連結

投稿者投稿内容
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-27 14:16
>エディットコントロールに改行区切りの長いテキストを表示するために、FOR文でまわ
>しながら大量のCStringオブジェクトを+=で連結しているのですが、これはメモリ効率的には
>問題ないのでしょうか?

CStringとは全然関係ないのですが、もしTextファイルから読み込んでいるならファイルサイズ
分だけcharの領域つくってバイナリモードで読み込めば早くないですか
(ファイルサイズのチェックは必要になりますが)
全然違う処理だったら申し訳ない

(追加)
書いている間に書き込みが・・・
全然違う処理でしたね、はずかしい^^;

それはそうとCStringって上限32Kじゃなかったでしたっけ?


[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-02-27 14:18 ]
takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2004-02-27 16:52
引用:

ここで公開すべきは
何のために文字列を連結しているのか
なぜ、文字列を行単位で別々に保持する必要があるのか。
結果として何を実現できればいいのか
だと思うのですよね。


舌足らずですいませんT-T

なぜ連結するか→改行区切りでSetWindowTextでエディットコントロールにセットし表のように見せたいため。(そもそもこれが間違い?^^;)

なぜ文字列を行単位で…→データを保持した構造体の配列を1要素ずつ必要なメンバを表示用に整形しているため。

といった感じでしょうか^^;

>それはそうとCStringって上限32Kじゃなかったでしたっけ?
一応1万件のデータを表示することはできたので大丈夫だと思うんですが…?^^;
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-27 17:03
>一応1万件のデータを表示することはできたので大丈夫だと思うんですが…?^^;
うわ、勘違いでしたね(GetLengthがint型だから32Kのわけないか)

なにかで見たような記憶があって書いたのですが、たぶんVC1.0のときのマニュアルかも
しれない。

お騒がせしてもうしわけありません。
イクザス
会議室デビュー日: 2003/12/11
投稿数: 16
お住まい・勤務地: 静岡
投稿日時: 2004-02-27 17:33
[横道]
引用:

ゆうじゅんさんの書き込み (2004-02-27 17:03) より:
>一応1万件のデータを表示することはできたので大丈夫だと思うんですが…?^^;
うわ、勘違いでしたね(GetLengthがint型だから32Kのわけないか)

なにかで見たような記憶があって書いたのですが、たぶんVC1.0のときのマニュアルかも
しれない。

お騒がせしてもうしわけありません。




16ビットの頃はそんな制限があったと思いますよ。
(VC4.0までかな・・・)
昔、サンプルだかであったCEditViewを使用した際に32Kまでしか
読み込めなかった記憶があります。
[/横道]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-03-01 14:34
ほむらです。
あぅせっかく返答もらったのに
ごめんなさい。埋もれてました^^;;;
--------
takashi氏へ
引用:

なぜ連結するか→改行区切りでSetWindowTextでエディットコントロールにセットし表のように見せたいため。(そもそもこれが間違い?^^;)

なぜ文字列を行単位で…→データを保持した構造体の配列を1要素ずつ必要なメンバを表示用に整形しているため。

といった感じでしょうか^^;


行単位で整形したものを一括で表示するためにということなんですね。。。
となれば、目をつむってしまうしか^^;;;;;

さっきも言ったとおり大量のメモリを確保しておいてそこにコピーしていくなんて方法も
あるかと思いますけど、そこまで作り込むメリットもないですしね。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-01 15:22
もし作りこむならScrollViewで表示するほうが効率はいいかもしれません。
以下の条件ならそんなに難しくなくつくることはできるはずです。
・元データが存在する
・元データの件数が明確
・表示行から元データを紐付けられる

また表示内容が変更されることが多く、再表示が発生するならさらに
必要性が高くなると思います。

takashi
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 79
お住まい・勤務地: 東京
投稿日時: 2004-03-02 15:33
返答ありがとうございます^^

引用:

もし作りこむならScrollViewで表示するほうが効率はいいかもしれません。


ふむふむ。CStringで連結せずにTextOutなどで直接描画するのも1つの手かもしれませんね(いってることが違ったらごめんなさい^^;)。

引用:

行単位で整形したものを一括で表示するためにということなんですね。。。
となれば、目をつむってしまうしか^^;;;;;


そうなんですねぇ^^; しかし、CStringがこんなに深く考えさせられるとは…。たくさんの貴重な意見どうもありがとうございました。とても勉強になりましたm(_ _)m 

スキルアップ/キャリアアップ(JOB@IT)