プログラム実行時のメモリ消費について

解決


かなえ  2006-06-07 03:01:32  No: 131733

環境:VB2005  WindowsXP

お世話になります。
現在、勉強中なのですが、ADOとVBを組み合わせてデータを処理するプログラムを組んでいます。
そこで教えていただきたいのですが、RecordSetを変数としてPublicでたくさん保持した場合どれくらいメモリを消費するのでしょうか?

現在、6つのレコードセット(各レコードセットにつきレコード数500前後、フィールド数20前後)を同時にあけているのですがメモリの少ないパソコンなどで実行した場合、このプログラムが原因でパソコンが重くなるか心配しています。

どれほどメモリを使用するのか、調べる方法はありませんか?

漠然とした質問で申し訳ないのですが、よろしくお願いいたします。


特攻隊長まるるう  2006-06-07 03:26:05  No: 131734

[VB.NET]では基本的に ADO.NET を使います。
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html

参照設定で COM を利用していますよね?
以下のような手順が必要となります。
[COM オブジェクトを解放する]
http://jeanne.wankuma.com/tips/programing/releasecom.html

>どれほどメモリを使用するのか、調べる方法はありませんか?
タスクマネージャを立ち上げておいて、プログラムを実行してみればいいのでは?


かなえ  2006-06-07 04:45:53  No: 131735

特攻隊長まるるうさん、ありがとうございます。
タスクマネージャで確認したところ28,000K程度使っているみたいです。
これをWindowsMEで128MByteのメモリを搭載したマシンで実行した場合、
苦しいのでしょうか?
今手元にそのような環境がないのでなんともいえないのですが、最終的にはそこで実行することになりそうなので。

プロで開発されている方はどのように自分の作ったプログラムとクライアントとの環境を天秤にかけていらっしゃるのでしょうか?

>参照設定で COM を利用していますよね?
>以下のような手順が必要となります。

よくわからないです(^^;
ActiveX Data Object 2.8を使用しているのってCOMを利用していることになるのでしょうか?
リンク先を読ませてもらったところ、Try Finallyで行っていますが、
Connection.Close
Set Connection=Nothing
(レコードセット変数に関しても上記と同様)
ではだめなのでしょうか??

もしよろしければまたお返事お待ちしております。


QA  2006-06-07 05:20:21  No: 131736

>タスクマネージャで確認したところ28,000K程度使っているみたいです。
そのプログラムの実行前と実行後の使用メモリの増え方を確認しないと意味内ですよ。

>これをWindowsMEで128MByteのメモリを搭載したマシンで実行した場合、
>苦しいのでしょうか?

そのマシンの通常使用しているメモリがどのくらいなのか分からないと
なんともいえませんね。(それを調べられるのはあなただけです)

で、XPで概算した使用メモリとそのマシンの空きメモリを見比べれば
だいたい見当つくんじゃないでしょうか。


特攻隊長まるるう  2006-06-08 00:00:01  No: 131737

[VB.NET2005]では確かめていないのですが、[VB.NET2003]では、参照の追加で
『COM』というタブから追加することになります。
>↓の図2
http://www.microsoft.com/japan/msdn/net/vbtransitionguide/chapter4/chapter4_13.asp

ADOだと問題が表面化し難いのですが、Excel の場合、プロセスが残ります。
http://www.bcap.co.jp/hanafusa/dotnet/Excel08.htm
ですから、よっぽどの理由がない限り、[VB6.0]時代のコードは忘れて、ADO.NET を
覚え直したほうが良いです。

>リンク先を読ませてもらったところ、Try Finallyで行っていますが、
いいえ、Try Finally はエラーが起こっても確実に解放処理を実行するためで、
解放処理のメインは ReleaseComObject メソッドです。これを実行する必要
があります。Nothing の設定はさほど重要ではないようです。
↓下のほうの黄色のフレーム内をお読みください。
http://www.bcap.co.jp/hanafusa/dotnet/Excel01.htm

>どのように自分の作ったプログラムとクライアントとの環境を〜
天秤にかけて?どっちかを選択するの?
…仕様を決めるのはお客さんなので事実の報告がメインです。
決められた仕様を満たした時に、実際の動作を調べて報告します。
今回の場合、『レコード数を10万行増やすとメモリ消費量が○○増えて、
それから類推すると××件のデータを扱うと限界になります。』…とか?
でも、重くなるのは主にCPU使用率なのでは?まぁ、メモリの空きも
必要だけど。。。

必要なら、実際に限界までデータを用意して、限界テストを実行します。

理論上の予測はできなくもないでしょうが、実機では別の結果が出る
場合も少なくないです。気になるなら早めに実機でのテストの計画を
立てましょう。

MEは扱わないので、情報を持っていませんが、参考になればどうぞ。
[@IT 最適なページ・ファイル・サイズを知るには]
http://www.atmarkit.co.jp/fwin2k/win2ktips/076pgfilesize/076pgfilesize.html
[@IT 必要メモリ・サイズを見極める]
http://www.atmarkit.co.jp/fwin2k/win2ktips/166memoryusage/memoryusage.html


かなえ  2006-06-08 10:46:12  No: 131738

QA様、特攻隊長まるるう様返信ありがとうございます。

返信内容と、リンク先を読んでみました。
COMオブジェクトって便利な反面、解放処理が面倒になりましたね・・・。

なるほど〜といちいち頷かされる内容でした。
私の場合、今までは自分が便利なものを「自分用」に作っていただけなので自分のPCのスペックを考えていればよかったのですが、今回のように友人からの頼まれ物という形ですと相手のパソコンでテストするわけにもいかず途方に暮れていました。

>どのように自分の作ったプログラムとクライアントとの環境を〜

というのは、そこからきた言葉なんです。

プロの方はこんなことまで考えて作ってらっしゃるのか〜とちょっとばかしその苦労が垣間見えた気がします。

些細な質問に付き合ってくださった方ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加