• 締切済み

メモリ開放

C#でのメモリの開放の仕方を教えてください。 二次元配列で1万、1万でやっているのですが、エラーが出てメモリが足りないと言われます。 開放をしたいのですが、ネットで探しても難しく書いてあって分かりません。おしえてください。

みんなの回答

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

他の回答者さんのおっしゃるとおり、まずは設計ミスだと思います。 それと、C#の質問なのに、C/C++カテゴリに投稿されていますので、 マナー違反です。 なお、C#において、.NETの範囲でメモリを扱っているのなら、 開放はありません。勝手にガベージコレクトされます。 .NETの範囲を超えてメモリ確保するつもりなら、 マーシャル系のメソッド処理が必要ですね。 http://msdn2.microsoft.com/ja-jp/library/system.runtime.interopservices.marshal(VS.80).aspx

回答No.2

私も、開放する以前に、メモリ不足だと思います。 二次元配列で、10000 x 10000 だと要素が1バイトでも単純計算で約100Mバイト弱、整数など4バイトなら400Mバイト弱もメモリを必要としてしまいます。仮にオブジェクトの配列となるとさらにそれ以上に大量のメモリが必要となりますよ! 何の配列なのかわかりませんが、もう少し小さいサイズの配列で済むよう方式の再検討をするべきかと思われます。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

何の二次元配列か、それがどれだけ作られるのかなど分かりませんが、 数が大きすぎるのでは?メモリ解放とかいう話ではなさそうなサイズです。 全部一括の配列にせず、必要なサイズだけ読み出すなど、 アルゴリズムレベルから見直した方がいいかもしれません。

関連するQ&A

  • メモリ確保方法を教えてください。

    Visual Studio.NET でC言語でプログラムを組んでいるのですが、二次元配列をたくさん使用したプログラムで、コンパイルして実行しようとするとエラーが表示されてしまいます。配列の要素を少なくすると実行はされるのですが、要素数が多くなるとエラーが表示されます。 実行時にユーザの使用メモリ数が制限されているなら、その使用メモリを増やす方法があれば教えていただけませんか?よろしくお願いします。

  • エラー処理,メモリ開放,exit

    こんばんは。現在、次のような C のプログラムを作っています。 ・ 動的にメモリを確保した配列や構造体が複数ある。 ・ しばしば,関数呼び出しのネストが複数(2~4) になる。 ・ ”エラーチェック => エラーなら終了” という動作が多い。 このようなプログラムで,"エラー => プログラム終了" の際,動的に確保したメモリを,関数呼び出しのネストを(return文 で)遡って,全て開放すべきでしょうか。 このようにすると,あまりにプログラムが煩雑になるので,今は "エラー => exit(-1) で直ちに終了" としています。 しかし改めて C の教科書を見ると,exit の時,オープンされているファイルやストリームについては,捨てられ,あるいは閉じられる,と書いてありますが,メモリについては何も書かれていないので,どうするべきか少し悩んでいます。 みなさんはこんな場合,どうされていますでしょうか? ご意見を下されば幸いです。よろしくお願いします。

  • メモリ開放をやってみたい

    PCを使用していると最初のうちは軽いのに 段々と重くなってゆき,しばらくすると元に戻ります。 これがとても不便です。 メモリ開放をすると軽くなると聞いたので 試してみたいのですが 何でも不具合が起こったりするとか何とか聞きました。 どうすればうまくメモリ開放ができるのでしょうか? フリーソフトでメモリ開放のソフトがあるので それを使ってやってみたいと思っているのですが どうなのでしょうか? ご存知の方はご教授お願いします。

  • メモリ開放しない方がいいアプリを教えて下さい。

    アンドロイドにキャッシュの消去やメモリ開放ができるアプリをダウンロードしました。 設定の仕方がよくわかりません。 メモリを開放してはいけないアプリはありますか? あればどの様なものがありますか?

  • GDI+におけるメモリの開放について

    C++でGDI+のコードを書いています。 たとえば Gdiplus::Bitmap bmp(1000, 1000); を一度呼ぶと、アプリケーションを終わらすまで確保した領域が開放されず、 繰り返し呼ぶと使用メモリがどんどん増えていってしまいます。 確保したBitmapを開放するにはどうしたらよいのでしょうか?

  • メモリの開放

    Windows2000で、パソコンを再起動せずに、メモリを開放する方法はあるのでしょうか? コマンドプロンプトでコマンドを入力して開放すると言うのを聞いた事があるのですが。 宜しくお願いします。

  • メモリの開放を全て行いたいが開放し損ねている VC++6.0 使用

    こんにちは。 Win2000環境 VC++6を使用してあるアプリケーションを開発してまして そのアプリ終了時に、確保したメモリを開放しているのですが 「すべてのメモリを開放できませんでした」というような表示がされてしまいます。 (この表示文字自体は、そのアプリの仕様です。エラーチェックしてくれています) 自分ではmallocしたデータは全て開放しているつもりですが どのメモリ(変数)が開放し損ねているのかわからずに困っています。 VCのデバッグモードを使用して処理をたどってみても、場所が特定できません。 mallocしている部分をコメントアウト等して ちょっとづつでも場所を特定できればいいのですが、 諸事情により(プログラムの処理上)それができない形になっています。 皆さんは、メモリを開放させる処理で、どこかメモリを開放し損ねている場合 どのようにその場所を突き止めているのでしょうか? VC++のデバッグモードの何かしらの機能か何かで その場所を表示させるような事なのできないのでしょうか? ちょっとわかりにくい説明ですが、 ご存知の方、どうぞよろしくお願い致します。

  • 多次元配列の動的メモリ

    1次の配列aの動的メモリは例えば 「double *a;  int num = 3; //配列の数  a = new double [3];」 などとすれば確保できることは分かるのですが、 二次元配列など、多次元配列の動的メモリは どのようにすれば確保できるのですか?

  • メモリの開放

    最近ノートパソコンのメモリを増設(1GBから2GB)しました。 パソコンショップの店員さんに「メモリの開放をしたほうがいい」と言われたのです。そこで質問なのですが、 1. これはいったいどういうことなのでしょうか。 2. これは必ずしなくてはいけないことなのでしょうか。 3. どうやってやればいいのでしょうか。 よろしくお願いします。

  • MacOS9.2のメモリ開放について

    MacOS9.2を使っています。OSを立ち上げたままメモリを開放する方法はないでしょうか。メモリ開放用のソフトでもいいのですが、「めもりーくりーなー」(Win版)のように定期的に自動で開放してくれるようなものがあるとかなり助かります。誰か知っている人いましたら教えて下さい><

専門家に質問してみよう