以下検証用コードですが注意事項を。
・タスクマネージャーを起動した状態で実行してください。もし問題が起きたときにすぐにHSP3を終了させるためです。
・メモリ使用量の変化を確認したらすぐにプログラムを終了してください。長時間起動し続けるとPCの動作に影響してきます。
・コード中にもコメントしてありますが、awaitで10未満(=待機時間10ms以下)にしないでください。PCがとても重くなり、最悪の場合ブルスク案件になりかねません。
#include "user32.as" repeat dim dc dc = GetDC(hwnd) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wait 1 //絶対に await 1にしないこと!!!!! //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% loop
タスクマネージャーの詳細タブだと分かりやすいですが、更新されるたびにどんどんメモリ使用量が増えていくのが分かります。
別のコードでK32GetProcessMemoryInfoGetDCを使い調べたところ、GetDCを実行するたびに4バイトのメモリ使用量の増加が確認できます。
すなわちGetDC関数毎にint型のメモリリークが発生していると思われます。
その他の関数(GetDesktopWindowやWindowFromPointなど)ではメモリの増加は確認されませんでした。
その他のデバイスコンテキストを扱う関数(CreateCompatibleDC、CreateCompatibleBitmap)などでもメモリの増加は確認されませんでした。
それ以外の関数でもメモリリークが起きている可能性はありますが関数ごとに検証してみないことには分かりかねます。
またhsp3.5〜3.6beta3の各環境で検証してみたところどの環境でも起こりました。
なぜGetDCだけなのかは分かりませんが、メモリリークはかなり重大な問題だと思います。(コーディングユーザがReleaseDCなどを忘れてる等ならまだしも言語側の問題となると)
HSP3側の問題であればなるべく早急に対応していただきたいです。
もし何か一時的な回避策があればご教授いただければ幸いです。