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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0311
princehsed_gettextでメモリを食う22解決


prince

リンク

2015/3/11(Wed) 18:16:23|NO.67805

以下のコードを実行してみてください。

#include "hsedsdk.as" repeat hsed_getactfootyid id hsed_gettext text, id wait 1 loop
次に、大きなファイルを読み込み、そのタブを開いてください。
タスクマネージャーでhsed3.exeのメモリ使用量が上昇していくのがわかると思います。
常駐型ソフトでは結構重大な問題なので、修正お願いします。



この記事に返信する


可憐

リンク

2015/3/11(Wed) 23:15:55|NO.67809

私の環境では全くメモリ使用量に異常はありませんでした。
await 1にしてみましたが異常なしです。

Windows8 64bit



cats

リンク

2015/3/12(Thu) 00:40:44|NO.67811

こちらでも異常が確認できました。
10,000バイトのコードを表示させた状態で1分間放置すると、
メモリ使用量が3,606[Kbyte]から43,908[Kbyte]になりました。
Windows 7 64bit , HSP 3.4beta



prince

リンク

2015/3/28(Sat) 17:17:04|NO.68191

追記です。
タスクマネージャーで確認したところ、ハンドル使用量も増えています。



ごめんなさい。名無しではなく、mitukiです。

リンク

2015/3/30(Mon) 23:36:08|NO.68220

20分放置したのですが
いじょうなしです。(スリープされた)
ぎゃくに 8500台Kから1000台Kになっています。
HSPあしす、hsed3,HSP型のIEのサイト、メモリ食うサいと(このサイト)
ぺいんと、色の編集のところ、タスクマネージャー
Windows 7,64Bit<わからない Hsp 3.4,3.5 1beta (2つとももってる)



kio

リンク

2015/3/31(Tue) 19:17:28|NO.68239

問題がないという人は確認の手順が間違ってると思います。
以下で問題が確認できると思います。
1.princeさんのスクリプトを実行してそのままにする。
2.HSPのcommomフォルダにあるkernel32.asをスクリプトエディタで開いてそのままにする
3.タスクマネージャーを起動。
4.HSPスクリプトエディタ(hsed3.exe)のメモリ使用量を確認。hsp3.exeではない。



ごめんなさい。名無しではなく、mitukiです。

リンク

2015/4/2(Thu) 15:02:52|NO.68315

どういういみかわかりません
 























??



kanahiron

リンク

2015/4/2(Thu) 15:08:56|NO.68318

分からないで荒らしに似た行為をするなら書き込まないほうがいいと思いますよ
自分の環境でも同様の現象を確認しました
win 8.1 x64
HSP3.5beta1



skyblue

リンク

2015/4/2(Thu) 17:14:37|NO.68320

win7uUlt 32bit
4GB corei5
hspver = 3406
デバックウインドウ無し

princeさんのコードを実行した後
以下の値が増加する事が分かりました。
ワーキングセット(メモリ)
ピークワーキングセット(メモリ)
メモリ(プライベートワーキングセット)
コミットサイズ
ページプール
ページフォルト
hsp3.exeでは
非ページプール

が増加し続ける事を確認しました。
hspedの方はスクリプト実行をやめても解放されない事を確認しました。

hspver = 3501でも細かくは見ていないものの同様に増加をしている事を確認しました。



farukon

リンク

2015/4/2(Thu) 18:04:00|NO.68323

当方の環境ではメモリ増加の異常が確認されました。

HSPのバージョン:3.32
環境:Windows 7 Home Premium 32bit
メモリ:2GB

>NO.68220
>HSPあしす、hsed3,HSP型のIEのサイト、メモリ食うサいと(このサイト)
>ぺいんと、色の編集のところ、タスクマネージャー
>Windows 7,64Bit<わからない Hsp 3.4,3.5 1beta (2つとももってる)

貴方は何を仰っているか理解できません。



_end

リンク

2015/4/2(Thu) 18:05:09|NO.68324

私の環境でもメモリ使用量の増加が確認できました。
メモリは8GB積んでいます。
タスクマネージャーで確認したところ、主にハンドルが異常に増え続けていました。
ページも地味に増え続けていました。
skyblueさんも仰るように、スプリクトを停止しても開放されませんでした。
HSPスプリクトエディタ自体を終了した場合、蓄積されていたメモリは一気に開放されることが分かりました。
余談かもしれませんが、空きメモリが0になってもハンドルやページは増え続けていました。

私の予想ですが、HSPスプリクトエディタが原因ではないかと思っています。



zakki

リンク

2015/4/2(Thu) 21:57:35|NO.68335

hsed3_footy2/interface.cppのhsed_gettextへの応答処理でメモリリークがありそうなのは確認しました。
しかし確かにハンドルも増えていきますね。なんでだろう…



skyblue

リンク

2015/4/3(Fri) 10:54:07|NO.68344

>余談かもしれませんが、空きメモリが0になってもハンドルやページは増え続けていました。
ページングによって、ページは4GBまで(コード含む)、ハンドルはWindowsの制限までは
空きメモリに関係なく増え続けます。
ハンドルに関してはメモリに関係なく最大値が一定です。



prince

リンク

2015/4/3(Fri) 11:13:47|NO.68345

>>hsed3_footy2/interface.cppのhsed_gettextへの応答処理でメモリリークがありそうなのは確認しました。
C++にはあまり詳しくないので間違っていたらすみません。
たぶん↓
http://dev.onionsoft.net/trac/openhsp/browser/trunk/tools/win32/hsed3_footy2/interface.cpp#392
のことだと思いますが、
nRetがFOOTY2_ERR_NONEで、WriteFileが成功したときのメモリ開放処理がまったく行われていないと思います。



prince

リンク

2015/4/3(Fri) 11:17:41|NO.68346

404行目から411行目をこんな感じにすれば正しく動くと思います。間違ってたらすみません。

if(nRet == FOOTY2ERR_NONE && !WriteFile(hPipe, lpBuffer, dwSize, &dwNumberOfBytesWritten, NULL)){ free(lpBuffer); return -3; } free(lpBuffer);



prince

リンク

2015/4/3(Fri) 11:33:41|NO.68347

zakkiさんの仰るとおり、メモリ使用量は増えなくなりましたが、ハンドル使用量は依然増え続けたままでした…



zakki

リンク

2015/4/3(Fri) 22:02:51|NO.68368

このへんのプロセス間通信のWindows API詳しくないんですがhsedsdk.asの

CloseHandle hDupReadPipe CloseHandle hDupWritePipe
は無効なハンドルで失敗してて、
エディタのプロセス用にDuplicateHandleしたhDupReadPipe/hDupReadPipeを
エディタ側ではなくてhsp3.exe側でCloseHandleしてるからだったりしませんかね。



Seatex

リンク

2015/4/4(Sat) 16:13:22|NO.68375

kioさんの通りにやってみましたところ、最初は3,000Kくらいですが
次第にメモリの使用量が増えていき、数十秒放置していると300,000Kを超えました。
さらに放置すると、500,000Kを超えて尋常ではないくらいのメモリを大食いしています。
これは非常に重要な問題であり、早期の改善が必要です。
特に低スペックのPCの方々はくれぐれもアップデートまでは注意が必要かもしれません。
そして、hsp3.exeを停止するとメモリはこれ以上食わなくなりましたがメモリは解放されない
ようです。ちなみに数分テストした結果では544,000くらいまで上昇しました。
停止させてからしばらく放置していると数千Kメモリが減少しました。
メモリ=バッファ、つまりgettextのためにバッファを溜め込んでいてしまっているとか
でしょうか?きっと原因はバッファでしょうか。



Seatex

リンク

2015/4/4(Sat) 16:20:40|NO.68376

測定環境: Windows 8.1 Enterprice
PC:HP Compaq nx6320 (CTではない、無線非搭載)
CPU : Intel Celeron M 430 (2006年より前のCeleron)
メモリ:1.50GB(RAM)

ちなみにwait 1をawait 0にしてみると、hsp3.exeが応答なし、スクリプトエディタは
メモリが500〜520MBまで上昇、という具合でした。



_end

リンク

2015/4/5(Sun) 00:46:08|NO.68386

>>NO.68344(skyblueさん)
ありがとうございます!
なるほどです。



skyblue

リンク

2015/4/5(Sun) 10:34:50|NO.68388

>メモリ=バッファ、つまりgettextのためにバッファを溜め込んでいてしまっているとか
>でしょうか?きっと原因はバッファでしょうか。
メモリの使用可能メモリが無くなっても
Windowsは動き続ける事ができるので心配しなくても大丈夫です。
仮想記憶によってある程度までは可能です。
実はプロセス空間が必ず4GBになっているので総容量が80GB以上になるけど、
実際に使う分だけメモリを割り当てる事でメモリが最低1GBになっているのです。
実際は推奨環境の2倍必要という罠があるけど



Seatex

リンク

2015/4/5(Sun) 14:56:07|NO.68390

>skyblueさん
つまり仮想記憶=スワップとなるのですから、内臓HDにも影響を与えることになるんですね?
メモリが足りなければ足りないほど仮想記憶を使うので操作が重くなるしHDの容量を減らす。
でも、WindowsだとReadyBoostで高速なSDカードなどを選べるのでなんとか回避できそうです。



skyblue

リンク

2015/4/6(Mon) 10:58:44|NO.68405

>メモリが足りなければ足りないほど仮想記憶を使うので操作が重くなるしHDの容量を減らす。
スワップと言うかページファイルは限界値があります。自分の場合だと大体4GBくらいの制限
前記のメモリが2倍は実メモリの方です。



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