「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@337) [高] [未処理]
@337■ (#1015) 「表列挿入」命令にてメモリリークの可能性 - NON (2009-07-27 20:06) /中 未処理
【症状】「表列挿入」命令にてメモリリークの可能性
【再現方法】
データは「1,2,5
1,2,5
1,2,5」
1でループ
  それは「1{~}3{~}5」
  データは「1,2,5
1,2,5
1,2,5」
  データの1にそれを表列挿入
  0.1秒待つ


このソースを実行すると使用メモリがどんどん増えていきます。
【バージョン】1.524、Vista SP2

(#1016) 明示的に配列に。 - U D (2009-07-28 00:18) /中 未処理
とりあえず明示的に配列にしてやることで大幅にリークの危険性を減らせます。
ただし、完全に回避はできないようです。


データとは配列=「1,2,5
1,2,5
1,2,5」をCSV取得
1でループ
  データは「1,2,5
1,2,5
1,2,5」をCSV取得
  それは「1{~}3{~}5」を改行で区切る。※ここが今回のリークの主な原因
  データの1にそれを表列挿入。※ここをコメントアウトすると完全にメモリ使用量は一定に。
  0.1秒待つ


元のコードではループごとに使用メモリが結構増加していましたが、
「改行で区切る」ようにしただけでほとんど増加しなくなりました。
(Ver.1.524 Vista で確認)

まぁそれでもまだ若干増加しているようですが。。。
4KBとかずつ。これは表列挿入命令が引き起こしているようです。

(#1018) 配列変数へのアクセスで - NON (2009-07-28 21:54) /中 未処理
サンプルでの大幅なメモリリークは確かに解消されました。

ただ、こちらで実際に問題となっている自作プログラムにCSV取得と区切るを大量挿入したものの、あまり効果が無かったので、1命令ごとに「待つ」で待たせてメモリ使用量を調べました。
すると、「~とは配列」で指定した配列変数にアクセスする
・代入文
・CSV取得
・表列挿入
などの命令が実行されるたびに、概ね4KB~12KBのメモリ使用量の増加が確認されました。
処理1回ごとに数十回~数百回ループするルーチンの為、ウェイト無しで連続稼動させると1秒ごとに400KB~のメモリを食って、どんどん低速化&重量化していきます(--;

配列変数へのアクセス部分あたりでオーバーヘッドがあるようですので、調べていただけたらと思います。

(#1239) 同意。 - FONO (2009-10-08 22:06) /高 未処理
タブに乗せた部品へのデータ取得を配列で
管理すると同様の現象が発生し、
扱う項目が複数の部品のデータなので、
操作するたびにメモリ使用量が
どんどん膨れ上がっていきました。
重くなったのはこれが原因だったようです。
優先度をあげておいたほうがこれはいいと思いました。

(#1015)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能