• ベストアンサー

vb フォームを消した後のメモリ

こんにちは。 VB2010Express .NET4.0 趣味でプログラミングを始めた初心者です。 ものすごく初歩の事かと思うのですが ご教授いただければ幸いです 今作ってるプログラムには2つウィンドウがあり 1つのウィンドウAからもう1つのウィンドウBを開ける形です AからBを開いた時のタスクマネージャーで見たメモリは5600K Bで作業しているうちに14000Kとなりました それでBを閉じた後、つまりAだけになった時のメモリは14000Kでした Bを閉じたのにメモリが減らないのはなぜでしょうか。 関係あるのかは分からないのですがクラスBの変数の開放はやっています。

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

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.1

メモリ管理しているだけですよ。 もう一回呼び出す可能性があるだろうから、余裕があるんならメモリ上に置いておけって感じで。 何回も呼び出す可能性のあるものをHDD上から読む込むのも時間がかかります。 メモリ管理はOS側(.Net側)の仕事なので、巨大なデータを扱うのでなければ意識しなくていいですよ。 他のプログラムを起動しまくったり、ある程度時間が立つとGCが働いて自動回収されると思います。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

#1 さんの回答に出てきていますが、 >GC 『ガベージコレクション』 というキーワードで調べてみるといいかも。 強制的に GC を動かすコードも用意されています。 設計思想に反するので使わない方がいいのですが、 実際に解放されるか試してみればいいでしょう。 http://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html ただし、アンマネージリソースは解放されないです。 VB は外部(.NetFramework以外)の DLL とか利用する場合も 多いですし、ファイルやデータベースも普通に使うから GC あるから安心とは思わないほうがいいですが。

y_hanamura
質問者

お礼

ご回答ありがとうございました。 そんなに気にしなくてもいいようですね。 最初にご回答いただいたNo1の方をベストアンサー とさせていただきました。 お二方ともありがとうございました。

関連するQ&A

  • VB6のユーザーコントロールがメモリを食う

    VB6でユーザーコントロールを作りまして、OCXにしてそれを、ある画面に数十個張り付けているのですが、メモリをたくさん食います。タスクマネージャで見ると50Mを超え、エラーがでるようです。 画面に張り付けたユーザーコントロールですが、画面を消してもメモリはあまり減らず食ったままになります。画面はちゃんとNothingしているのですが、ユーザーコントロールに使われているメモリは開放されないようです。次のことをご教授願えればおねがいいたします。 1)ユーザーコントロールOCXを動的に画面に張り付ける方法 2)デザイン画面で張り付けたユーザーコントロールOCXのメモリを開放する方法 3)メモリをあまり消費しないユーザーコントロールの作り方 その他なにかよいアドバイスがあればお願いいたします。

  • VB.NET

    VB.NETでプログラミングしているのですが初歩的なことで躓いてしまいました。 画面Aのボタンをクリックして画面Bに移動させたいのですが調べても出てこないので詳しい方、教えて下さい。

  • VB.NET!!

    VB.NETでプログラミングしているのですが初歩的なことで躓いてしまいました。 画面Aのボタンをクリックして画面Bに移動させたいのですが調べても出てこないので詳しい方、教えて下さい。

  • C#のガベージコレクタについて

    お世話になります。 現在C#で画像関連のプログラミングをしています。 ガベージコレクタがあるため安心してプログラムを組んでいたのですが、 参照されない画像を開放しないでいると、タスクマネージャーからメモリがどんどん増えていくのが確認できました。 具体的には、PictureBoxのImageに繰り返し代入していました。 ガベージコレクタは参照されなくなった変数を取りあえず放っておいて、 メモリが一杯になってきたら開放処理をするため、 快適なソフトを作るためにはできるだけガベージコレクタに頼らない方が 良いと考えました。 ですので今プログラム全体を見直して開放処理を加えているのですが、 厳密に言うとstring等にも開放処理を加えたほうがいいのでしょうか? newで確保した変数や、関数からオブジェクトを受け取った時などは全て開放しなければ いけないと思いますが、この認識で合っているでしょうか?

  • VB6のLSETをVB2005で実現するには?

    VB6の下記ソースをVB2005のアップグレードツールで変換したらエラーになってしまいました。VB2005ではサポートされてないみたいで、どのように変更したらよいか途方にくれております。 どなたかご教授下さい。よろしくお願い致します。 --ソース抜粋-- A:構造体変数 B:構造体変数 VB6: LSET A = B VB2005: ?????

  • パソコンによって同じソフトでもメモリの使用量が違うのはなぜですか?

    タスクマネージャーで確認すると、ソフトAを立ち上げた時のメモリの使用量が、パソコンAの場合は1.8kバイトでパソコンBの場合は11.0kと差があるのですが、どうしてなのでしょうか? エクセルで比較すると、一方は10Mに対し他方は20Mで、常にパソコンBのほうがメモリの消費が多いのですがなぜですか?

  • IEとメモリ

    Internet Explorer をしばらく使用していると、急に新しいページなどが開けなくなります。 何個かウィンドウを消すと開けるようになるのですが、タスクマネージャーで確認するとIEがものすごくメモリを使っているのが原因のようです。 新しいページが開けない状態ではタスクマネージャーすらも起動しない時もあります。 何か対策はないでしょうか。 IEは7 メモリは4GBあります。

  • メモリの中身は大切?

    初歩の質問で申し訳ないです。 プログラミングするときには、 「メモリ内部に変数等がどのように格納されているかイメージできることが大切。(たとえばC言語において配列と、ポインタ配列のメモリの割り当て方が違うなど)」 とかいうのをたまに聞きますが、これってなんで大切なんですかね???

  • VC++6.0で作成したクラスをVB6.0で使うには?

    初めて投稿します。 プログラミング初心者の為、初歩的な質問になるかもしれませんがご容赦下さい。普段、主にVisual Basic6.0(以下VB6.0)でプログラミングを行なっています。 VB6.0には演算子のオーバーロードする機能がない(?)ため、Visual C++6.0(以下VC++6.0)でプログラミングを行い、VC++6.0で作成したクラスをVB6.0で呼び出して使用したいと考えています。 インターネット上でいろいろと調べてみたのですが、その方法がわからず投稿させていただきました。VC++6.0で作成したDLLの中の関数をVB6.0で呼び出して使用する方法はわかったのですが、クラスということになると、DLLでは無理なのでしょうか? どなたか、VC++6.0で作成したクラスをVB6.0で呼び出す方法、または勉強方法(教材)などを教えていただけると助かります。 宜しくお願いいたします。

  • メモリ使用量

    VB2005.NETでデスクトップに常駐型のアプリを作ったのですが、 タスクマネージャでメモリ使用量を見てみると19,000 Kくらいになってました。 フォームに20個くらいのコントロール(テキストボックス、コンボボックス、ボタン、ラベル)があるようなアプリなんですがこんなものなのでしょうか。 軽くする方法がありましたら教えてください。 できる限り軽くしたいです。 よろしくお願いいたします。

専門家に質問してみよう