2 Comments
 本日ご紹介する MemChecker は Real Studio でアプリケーション開発をしているユーザを対象にしたクラスファイルです(アプリケーションではありません)。Real Studio のプロジェクトに追加して使用してください。デバッグ時に表示することでアプリケーション内で使用しているオブジェクトの増減を確認することができます。

MemChecker.png
DownLoad
3/16 追記:コメントにてコンパイルエラーのご報告をくださりありがとうございます
 2011 r4 以降でエラーが出ていました。Listbox の Addrow メソッドにVariant型をわたすと型の解決ができずエラーとなります。これは 2011 r4 の Fix、
17595 Compiler: No longer asserts under a very specific set of circumstances when testing for ambiguous methods.
 による影響でした。Variant型はメソッドで要求されている型にある程度は自動でキャストされます。ところがListBoxのAddrowに 2010 r4 で新たに ParamArrayが渡せるようになりました。この為に引数がVariantの場合、ParamArrayを受けるAddrowなのかストリングの配列(item() as string)を受けるAddrowなのかが識別できないためコンパイラでエラーとなります。

■MemChecker Window について
 この MemChecker は数年前にWEB上で公開されていたものです。元々のソースで利用されていた関数が最近の Ver で廃止されてしまったので、代替手段として機能追加された rutime モジュールを利用するよう改修しました。動作確認は Real Studio 2011 r1.1 にて行っております。

 公開にあたり元々のソースを公開されていた方に連絡をとりたかったのですが、私がダウンロードしたのが7年前。すっかりダウンロード先を忘れてしまった上に同時にダウンロードしてある Readme にも連絡先が無く、連絡をとることができませんでした。 Google 先生にお伺いをたてたところ「そんなの知らない」とのこと。。。ただ、Real Studioを利用している方にとっては有益なものだと思いますので真に勝手ながら公開することとしました。

 グローバル参照可能なオブジェクト配列などを作成した場合等に起きやすいメモリーリーク。この MemChecker を利用すると、アプリケーション実行中に自由にクラス名とそのオブジェクトの数が確認できます。直前のチェックとの増減値も表示できるので配列クリアの前後で確認したりすると、オブジェクトがきちんと解放されているかなどのチェックを行うことができます。

●使い方
 1「MemChecker.rbw」を自分の Real Studio のプロジェクトにドラッグして追加
 2 プログラムの任意の場所で MemChecker.Show を実行(AppのOpen時等)
  ex.こんな感じでやるとデバッグ時のみ表示されるようになります
     #if DebugBuild then
       MemChecker.Show
     #endif
 3 表示された MemChecker ウインドウで以下の操作を行うと情報が表示されます
  ・今すぐ更新をクリックするとすぐに情報が更新されます
  ・自動更新にチェックを入れると指定した秒間隔で自動更新を行います

●表示内容について
・表示されるオブジェクトカウントには MemChecker 自身のオブジェクトも含まれます
・オブジェクト数が減るはずなのにカウントが減っていない時はメモリリークが発生しています
ex.オブジェクトを入れた Dictionary をクリアしたのにオブジェクト数が減っていない等

以下とりあえず。。。
■ライセンスや免責事項等
 個人・商業・営利・非営利目的に関係なく、無料でお使いいただけます。サンプルソースを使用したことによる、直接的、及び間接的な損害に対する責任を一切負いません。利用者の責任においてご利用いただけますようお願い致します。

ひらくん
Posted byひらくん

Comments 2

There are no comments yet.
-  
管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

2012/03/14 (Wed) 23:04 | EDIT | REPLY |   
-  
管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

2012/04/01 (Sun) 23:11 | EDIT | REPLY |   

Leave a reply