• ベストアンサー

メモリの解放の仕方

恐れ入ります。 メモリを解放するとはどういうことなんでしょうか? for loopをくりかえしてるうちにどんどんどんどんメモリの使用率があがっちゃって。おそらくメモリを解放すればあがらなくなるとおもうのですがその解放の仕方がよくわかりません。そもそもメモリとvbの関係ってどういう関係なんですか?おしえてください。お願いします。

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

  • ベストアンサー
  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

システム(Windows)から確保したメモリ領域をシステムに返却するということですね。一般的には、変数などで領域を確保したものを解放することを指します。 VBでは、メモリの確保と解放は自動的にされていて、プログラム上で意識することはありません。たとえば、プロシージャレベルの変数だとプロシージャが呼び出されたときに自動的に確保されてプロシージャを抜ける時に解放されています。 V C言語だと、変数の確保をする命令もありますし解放する命令があります。メモリを確保だけして解放しないと、繰り返し実行させている内にメモリが足りなくなります。これをメモリがリークしている、と言います。 #VC.netだと自動化されているらしい(未確認)

googole
質問者

お礼

お返事ありがとうございます。 for loop の箇所を別のプロシージャにて処理させるようにするとメモリが60%おさえることができるようになりました。まさにGJでした。

その他の回答 (2)

  • sh-
  • ベストアンサー率29% (13/44)
回答No.3

メモリに関しては、ガベージコレクションにより自動解放される仕様になっています。 VB.NETであれば明示的に解放させることもできますが、これで問題がすべて解決されることはないと思います。 メモリ使用量だけにとらわれず、設計に問題がないかどうかも含めて検討してみてはいかがでしょう。

参考URL:
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/ObjectDispose/
googole
質問者

お礼

ありがとうございます。設計に問題ですか・・おそらく問題ありまくりですね。でもスキルがないので判断できないっす。しかも人にいえないようなプログラムなのできくこともできないっす。

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.2

こんちは  私はフリーでメモリの掃除屋さん  を常駐しています。   残りのメモリ量で掃除します。 http://ringonoki.net/tool/memo/souziya.html

googole
質問者

お礼

お返事ありがとうございます。 これだと掃除できないんですよね・・・泣

関連するQ&A

  • メモリの解放

    以前にも質問があったみたいですが、 結論が載ってなかったので、質問します。 VC++で作成したDLLをVBで呼び出した場合に、 例外エラーになってしまいます。 たぶん、DLL側で確保したメモリを解放していないからだと思うんですが…。 で、解放の仕方がわかりません。 どちら側でどうやればいいのでしょうか? VC++初心者です。 お願いします。

  • メモリ解放について

    <VC++で作成したDLLをVBで呼ぶ処理> DLL側でメモリ割り当てを行ったあと、VB側でメモリ解放を したいのですが、方法がわかりません。 教えてください。

  • メモリ解放の仕方を教えてください

    下記のコードでプロセスの使用メモリ容量をみると、同じデータが2つメモリ上存在しているのですが、 この両方ともメモリ解放をするにはどうすればいいのでしょうか?最後のfreeでエラーが出てしまいます。 完全な解放の仕方を教えてください。お願いします。 HANDLE m_hHeap; LPSTR m_pData; LPVOID pMem1 m_hHeap = HeapCreate(HEAP_NO_SERIALIZE, 0, 0); m_pData = (LPSTR)HeapAlloc(m_hHeap, HEAP_ZERO_MEMORY, nDataSize); memcpy(pMem1, m_pData, size1); HeapFree(m_hHeap, HEAP_ZERO_MEMORY, m_pData); free(pMem1);

  • メモリの解放について VB6 VBA

    VB6やVBAで動的配列をERASEしたのですが、タスクマネージャーで見ても使っているメモリを解放しているように見えません。 動的配列の内容をMsgBoxで表示させるたびにメモリがどんどん減っていきます。Eraseしても戻りません。 Redim ArryaDat(0)とかでも無理でした。 APIを使って(どんな方法)でも、メモリを解放したいのですが、可能でしょうか? Dim ArrayDat() as String Redim ArrayDat(100) ArrayDat(0) = "なんとか" ArrayDat(1) = "かんとか" ... ArrayDat(100) = "メモリを解放したい" for i = LBound(ArrayDat) to UBound(ArrayDat) MsgBox("どんどんメモリが消費されていく・・ [" & ArrayDat(i) & "]") next i Redim ArrayDat(0) Erase ArrayDat NsgBox("解放したつもり? 誰か教えて") あと、.NETではメモリ解放はどうなっているのでしょうか? まだ使いませんが、頭の片隅に入れておきたいです。

  • メモリがどんどんなくなっちゃう・・・

    はじめまして、こんにちわ。 vb2005をはじめて使ってみて for loop構文を勉強して実際につかってみたのですが メモリがどんどんなくなってしまうんです。 どうすればいいですか?

  • メモリを解放しないとどうなる?

    趣味でプログラムの勉強をしています。 初歩的な質問になると思いますが、よろしくお願いします。 C言語やC++言語のように、動的に確保したメモリを使用後に意識して解放しないといけない言語で、解放の処理をしないままプログラム(アプリケーション)を終了した場合にはシステム(OS?)的にはどのような状態になるのでしょうか? 例: ・malloc して free しない ・new して delete しない 確保されたメモリ領域がそのまま残り、システムとして使用できるメモリ量が減る(解放にはPCの再起動が必要)のでしょうか? それともアプリケーションの終了時に自動的に解放されるのでしょうか? Windowsの場合を想定してご回答いただだけると嬉しいです。

  • メモリの解放について

    御指導お願いいたします。 iMac 2.8GHz Intel Core 2 Duo   4GB 800MHz DDR2 SDRAM を使用中。写真が趣味でフォトショップで現像、加工などを行って おりますが、長時間作業していると4GBのメモリを 3/4ぐらい使用、 加工ソフトを閉じてもほとんど解放されず 4/3使用中のままです。 電源投入時のメモリ使用状態に戻すには再起動しか、方法は ないのでしょうか。もし、他に方法がありましたら教えてください。

    • ベストアンサー
    • Mac
  • 動的メモリ 解放がうまくいかない

    よろしくお願いします。 一ファイル20万行程度のCSV形式のテキストファイルが、50個ほどあります。 これを一行づつ読み込んで、strtok( ,",")でデータを取得しようと思っています。 ファイルの行数はまちまちなので、新しいファイルを読み込むときに そのファイルの行数を調べて(ここでは count 行あります) callocをつかって、メモリを確保しました。 btxt=(char **)calloc(count,sizeof(char *));/*動的メモリ確保*/ for(i=0;i<count;i++) btxt[i]=(char *)calloc(120,sizeof(char)); /*一行120文字まで*/ if(btxt==NULL){printf("btxt 確保エラー\n"); exit(0);} 上記btxt配列にすべての行数を読み込んで、strtok()処理をした後 for(v=0;v<120;v++){ if(btxt[v]){ free(btxt[v]); btxt[v]=NULL; }  } free(btxt);  btxt=NULL; で解放してから、次のファイルに移ります。 問題は、ループするごとにメモリ容量がどんどん減ってきて、30ループもさせると メモリ不足でエラーが出ることです。 ブレークポイントを使って調べてみたのですが ループ一回目 calloc前 707.7 MB: calloc後 748.6MB 解放(したつもり)後 747.9 MB ループ二回目 calloc前 750.6 MB: calloc後 794.6MB 解放(したつもり)後 793.8 MB ・・・・・・・・・・・・・・・・・・・ ループ四回終了時には868.3MBにもなって、初めより160MBも使ってしまいます。 free()が効いてないと思うのですが、どこがおかしいのか教えてくださいませ。

  • [ちょっと息抜き]メモリを解放 or 開放?

    お疲れ様です。 技術的な質問とは直接関係ないかもしれませんが、 息抜きと思って暇であれば見ていってください。 単に表現に関する質問です。 メモリを「かいほう」すると言いますが、 「解放」と「開放」どちらが正しいでしょうか? 意味的には、「解放」かと私は思うのですが、 各検索サイトで調べると以下のようになります。 キーワード:「メモリの解放/メモリの開放」 Yahoo:「1846件/ 467件」 Google:「3150件/3050件」 MSN:「 838件/ 432件」 「解放」を使用しているサイトに軍配が上がりますが、 「開放」も何気に多いですね。 どちらで表現しても構わないと言う事なんでしょうか。 皆様ソースにコメントを記述していると思いますが、 どちらで書いてましたか?

  • 「オブジェクトの破棄」と「メモリの解放」は同じ意味

    「オブジェクトの破棄」と「メモリの解放」は同じ意味ですか? ********************************* Sub Sample1() Dim objIE As Object Dim buf As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://oshiete.goo.ne.jp/" Do While objIE.busy DoEvents Loop Do While objIE.Document.readyState <> "complete" DoEvents Loop Set objIE = Nothing End Sub ********************************* の場合の「Set objIE = Nothing」は、 「オブジェクトの破棄」でしょうか? 「メモリの解放」でしょうか? どちらでもありますか? ご回答よろしくお願いします。

専門家に質問してみよう