リストボックスへ文字列を追加する速度が遅くなる

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
まのんとろっぽ
記事: 2
登録日時: 2007年6月08日(金) 22:13
お住まい: 札幌

リストボックスへ文字列を追加する速度が遅くなる

#1 投稿記事 by まのんとろっぽ »

すいません。初めてなんですが、質問させてください。

すごく単純なコードなのですが、
メインウインドウに CommandButton1 と ListBox1 を設置しておいて以下のようなコードを組んだ場合、
動作自体は問題ないのですが、ボタンを押下する度に 1000件の文字列の追加が完了する速度が遅くなってしまいます。

コード: 全て選択


Sub MainWnd_CommandButton1_Click()
	' リストボックスのアイテムを消去
	SendDlgItemMessage(hMainWnd, ListBox1, LB_RESETCONTENT, 0, 0)

	' リストボックスに 1000 個のアイテムを追加
	Dim i As Long
	For i = 1 To 1000
		SendDlgItemMessage(hMainWnd, ListBox1, LB_ADDSTRING, 0, "This is Test String " & Str$(i))
	Next For
End Sub
1回目は 0.8秒くらいで 1000件の追加が完了するのに、
10回目は 3.0秒くらいかかるという感じになります。

このような速度劣化が起きないような方法をご存知の方がいましたら教えていただけないでしょうか?
まのんとろっぽ でした。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

思い当たる事と言えば、Str$をwsprintfに書き換えてみてはどうか?てなあたりです。

before

コード: 全て選択

Sub MainWnd_CommandButton1_Click() 
    ' リストボックスのアイテムを消去 
    SendDlgItemMessage(hMainWnd, ListBox1, LB_RESETCONTENT, 0, 0) 

    ' リストボックスに 1000 個のアイテムを追加 
    Dim i As Long 
    For i = 1 To 1000 
        SendDlgItemMessage(hMainWnd, ListBox1, LB_ADDSTRING, 0, "This is Test String " & Str$(i)) 
    Next For 
End Sub 
after

コード: 全て選択

Sub MainWnd_CommandButton1_Click() 
    ' リストボックスのアイテムを消去 
    SendDlgItemMessage(hMainWnd, ListBox1, LB_RESETCONTENT, 0, 0) 

    ' リストボックスに 1000 個のアイテムを追加 
    Dim i As Long,SendBuf[100] As Byte
    For i = 1 To 1000 
        wsprintf(SendBuf,"%s%d","This is Test String ",i)
        SendDlgItemMessage(hMainWnd, ListBox1, LB_ADDSTRING, 0,SendBuf)
    Next For 
End Sub 
最後に編集したユーザー konisi [ 2007年6月09日(土) 13:05 ], 累計 1 回
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
まのんとろっぽ
記事: 2
登録日時: 2007年6月08日(金) 22:13
お住まい: 札幌

なるほど!

#3 投稿記事 by まのんとろっぽ »

> とてもそのコードがAB4系でコンパイルできるようには見えないのですが、バージョンはいくつでしょうか?

えーっと、一応コンパイルが可能なことは確認しております。動作もします。
バージョンは 4.24.00 です。

それはともかく、確かに回答をみたところ、自分でも不思議なことをやっていたことに気づきました。
早速試してみたところ、期待通りの動きをしているようです。

ありがとうございました。
まのんとろっぽ でした。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#4 投稿記事 by konisi »

よくみると自分の使ってるAB4はAB4.13で、試しにAB4.24で動かしてみると普通に動きました。すみません。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する