HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1218
名無しnoteadd命令について7解決


名無し

リンク

2012/12/18(Tue) 18:07:44|NO.51253

noteadd命令を使って10000行分の書き込みを行ったのですが、かなり処理に時間がかかってしまいます。
この命令は処理が重いんでしょうか?
また、早く書き込める方法があれば教えていただきたいです。



この記事に返信する


@key

リンク

2012/12/18(Tue) 18:24:29|NO.51254

noteaddは自動的なメモリ拡張が含まれれます
この処理は重く、またメモリに負荷がかかります
最初にあとで使うであろう文字数をsdimで確保することをおすすめします

例)一行10文字の場合
sdim buf,1100000;10*100000に少し見積もって足しておく



名無し

リンク

2012/12/18(Tue) 18:56:24|NO.51255

素早い回答ありがとうございます。
sdimで確保してみました。
ですが、これでもまだ遅いです。
noteadd命令の限界なのでしょうか?
自分のプログラムが間違っているのでしょうか?

sdim date,1100000 notesel date repeat 10000 noteadd "テスト",cnt,1 loop mes "完了"
↑で完了と表示されるまでに5秒くらいでした。



@key

リンク

2012/12/18(Tue) 19:08:24|NO.51256

この処理なら、
noteadd "テスト",cnt,1

date+="テスト\n"
にすれば少し早くなります

あとこれで限界です



名無し

リンク

2012/12/18(Tue) 19:33:06|NO.51258

時間がかかりすぎるとつらいと思うのですが、仕様ということにします。
ご回答ありがとうございました。



inovia

リンク

2012/12/18(Tue) 19:39:52|NO.51259

この場合だったらmemcpyが速そうな感じ

#include "winmm.as" #define timeStart timeGetTime : st = stat #define timeEnd timeGetTime : et = stat #define ctype time ((1.0 * et - st) / 1000) // ----- sdim date, 1100000 notesel date timeStart repeat 10000 noteadd "テスト",cnt,1 loop timeEnd mes "noteadd : \t"+strf("%.3f",time())+"s" // ----- sdim date, 1100000 timeStart repeat 10000 date+="テスト3\n" loop timeEnd mes "文字列連結 : \t"+strf("%.3f",time())+"s" // ----- sdim date, 1100000 src = "テスト3\n" offset = 0 size = strlen(src) timeStart repeat 10000 memcpy date, src, size, offset, 0 offset+=size loop timeEnd mes "memcpy : \t"+strf("%.3f",time())+"s"



名無し

リンク

2012/12/18(Tue) 20:01:37|NO.51260

memcpyだとすごく早いんですね。
ちょっと分かりづらい命令ですが、試してみたいと思います。
ありがとうございます。



名無し

リンク

2012/12/18(Tue) 20:57:36|NO.51263

できました。

#module #deffunc save sdim date,1100000 notesel date offset = 0 repeat 10000 src = "行数"+cnt+"\n" size = strlen(str) memcpy date, src, size, offset, 0 offset+=size loop notesave "save.txt" return #global save
こんな感じにしました。
すぐにセーブできているみたいですがどうでしょうか



ONION software Copyright 1997-2021(c) All rights reserved.