こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

オブジェクトの開放

VBでCreateObjectの直後に
Set xxx = Nothing
が入っているのですが、どうやら効いていないようなのです(メモリ使用量が増え続ける)。
高速で処理されている場合
Set xxx = Nothing
は効かないのでしょうか?。
教えて下さい。宜しくお願い致します。

投稿日時 - 2003-06-19 15:24:02

QNo.579468

hfc

すぐに回答ほしいです

質問者が選んだベストアンサー

いや、頼るも何も、勝手に答えるだけ。
わからなそうだったら、無口になる。

1.環境を書く。
2.たとえわからなくても、レスを返す。
   わからないなら、どのあたりがうまく行かないかの詳細を記す
3.普段から質問をきちんと締め切る。

そういう人には、何とか解決しようと、努力する。
そうじゃなければ、途中で投げ出す可能性大。

他の人だって同じ気持ちなんじゃないかな?

http://oshiete1.goo.ne.jp/kotaeru.php3?qid=582393
で名前を二人挙げているけど、ここの掲示板でツワモノが数人いるから、その人たちの方が心強いかも。

投稿日時 - 2003-06-25 15:12:41

お礼

いろいろとありがとうございます。
上記の3点肝に命じときます。

投稿日時 - 2003-06-27 11:50:46

ANo.8

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

2ch

CreateObject と Nothing

これを使用すると、言わずと知れていると思いますが、
1.PCの空きメモリ領域調査
2.メモリの確保
3.開放

という処理をします。
それを1秒間隔でするとなると、メモリ確保でコケる可能性は大いにあります。
ロジックであっていようとも、コケるのは、Windowsの仕様です。

ちなみにWin98が出るときに、生放送でCNNに出演した、(自信満々の)ビルゲイ○氏の目の前で、PCがハングアップを起こしました。
OSを立ち上げただけです。

オブジェクトを開放しないで、生成したインスタンスを継承したままの方が、メモリリークしないかもしれません。

投稿日時 - 2003-06-25 12:02:58

お礼

本当にありがとうございます。2chさんからご回答を頂き、自信が持てました。
いろいろ私の説明が至らなくてご迷惑をお掛けして申し訳ありませんでした。
まだテスト中なので、また何かありましたらご相談に乗って下さいね。
頼りにしていますので宜しくお願い致します。
こんな私に頼られると迷惑ですかね?。

投稿日時 - 2003-06-25 14:34:01

ANo.6

2ch

>1秒
それはタイマーが負荷を与えているだけだよ。

要検証:新規プロジェクトを起こして、単純なプログラムを作って、タイマがOSにどれだけ負荷をかけるか

投稿日時 - 2003-06-25 10:56:19

お礼

ありがとうございます。
オブジェクト作成を初期処理にオブジェクト解放を終了処理に移動した結果、ハンドル数、メモリ使用量ともに増減が少なくなりました。当初から最終的にはこうしようと思っていたのですが、コーディング上問題が無い為調べておりました。簡単なプログラムを作成してDoo Loopの中にオブジェクト作成、解放を入れた時、外に出した時ではハンドル数、メモリ数とも大きな開きがありました。中に入れたときは38時間後にハンドルリークを起したぐらいです。外に出したときは大した増減もなく3日間流れました。
今は初期処理、終了処理に分けて1週間の稼動確認中です。

投稿日時 - 2003-06-25 11:45:28

ANo.5

2ch

オブジェクト変数なのですね。
レイトバインディングで、オブジェクトを生成しているなら、改善の余地はありません。

デバッグして確かめましたか?Nothingされているはずです。

メモリを消費が激しいのは、一つの処理がものすごく長いなど、他に原因がありませんか?

投稿日時 - 2003-06-23 11:45:23

お礼

度々ありがとうございます。
ここの部分の処理は1秒に1度行われ、24時間稼動のシステムなのです。
他の原因も含めいろいろ調査してみます。

投稿日時 - 2003-06-25 10:47:00

ANo.4

2ch

>New 型では宣言していませんでした。
なら、どう宣言して、何をCreateObjectで作っているかがわからないと書かないと、書きようが無い。

投稿日時 - 2003-06-23 09:40:41

お礼

大変失礼致しました。
Public xxx As Object
Set xxx = CreateObject("aaa.bbb")
Set xxx = Nothing
のように記述しています。

投稿日時 - 2003-06-23 11:33:34

ANo.3

参考URLを参照してみてください。

参考URL:http://homepage1.nifty.com/MADIA/vb/vb_bbs/200203_02030017.html

投稿日時 - 2003-06-19 15:34:53

お礼

早速のご回答ありがとうございました。

投稿日時 - 2003-06-22 19:02:11

ANo.2

2ch

その宣言が
Dim 変数 as New 型

でNewで宣言しているからじゃないの?

New宣言は、お勧めしない。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=161004

投稿日時 - 2003-06-19 15:34:27

お礼

早速のご回答ありがとうございます。
New 型では宣言していませんでした。

投稿日時 - 2003-06-22 19:00:33

ANo.1

こんにちは。

どこかでトラップがかかって
Set…Nothingの行が読み飛ばされてるとか。

投稿日時 - 2003-06-19 15:34:26

お礼

早速のご回答ありがとうございます。
読み飛ばしはありませんでした。

投稿日時 - 2003-06-22 18:59:00

あなたにオススメの質問