- - PR -
メモリの解放をしたい。
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-26 09:36
現在、VB 2005 でプログラムを作っているのですが、
その中で、外部のプログラムで大量にメモリを使用する処理があります。 VB でも、直前まで大量のメモリを使用する処理があり、 外部のプログラムに渡すデータをファイルとして作成した後で、 それらのメモリを解放したいと思います。 そのような場合、GC.Collect ではなく、実際に物理メモリをある程度解放する 処理を明示的に動かす方法は何かないものでしょうか? | ||||||||||||||||
|
投稿日時: 2007-12-26 10:21
CとかC++でやればいいんじゃないの。
| ||||||||||||||||
|
投稿日時: 2007-12-26 10:26
マネージドなリソースを明示的に開放する手段は無い筈です。
逆に言えばアンマネージドなリソースとしてAPIなどでメモリ確保をおこなえば、明示的に開放できます。ただしその為には既存の処理を大幅に書き換えることになるので、現実的じゃありませんね。最初からそのつもりで設計実装していれば、どうと言うことの無い話なんですけどねー。 | ||||||||||||||||
|
投稿日時: 2007-12-26 11:00
ぶさいくろうさん、甕星さんありがとうございます。
要は、自分で管理しなきゃできんってことですね。 甕星さんのおっしゃるように、API でメモリを確保して、 そのメモリ上を読み書きするように、 プロパティを作ろうかなぁと考え始めたのですが、 メモリを大量に使う VB のロジックを別 exe にする事を 思いつきました。 これなら、起動は遅くなりますが使用したメモリは確実に 解放されますんで。 | ||||||||||||||||
|
投稿日時: 2007-12-26 15:12
と
は別のプロセスとして実行されるんでしょ? であれば、前者のプログラムでいくらメモリを使っていようとも、後者のプログラムのメモリ使用に直接的な影響を与えることは原則ありません。 # 極端に実メモリが少なければスラッシングが発生するかもしれませんが、それは環境がよくないということで。 なので、
なんて操作をしてもほとんど関係ありませんよ。 疑問があるようなら ・仮想記憶 ・プロセスヒープ ・CLRのメモリ管理 などについて上から下まで勉強してみてください。 | ||||||||||||||||
|
投稿日時: 2007-12-26 19:39
物理メモリと書いてあるので、Windows2000 の頃まで流行った、メモリ クリーナーとか、スイーパーとか、デフラグとか、そういうイメージなのではないかと。 Virtual PC が、物理メモリの空きを要求しますが、そのように、物理メモリに空きが有ったらそこが使われるだろうから、速くなるんじゃない?って方向かと思います。 | ||||||||||||||||
|
投稿日時: 2007-12-26 21:03
そうですかぁ? GC.Collect() なんかで物理メモリが解放されると考えてるとしたら、それこそ大間違いじゃないですか? 物理メモリを管理しているのはOSであって、CLRはまったく関与してないじゃないですか。 | ||||||||||||||||
|
投稿日時: 2007-12-26 22:00
ああ、訂正しておこう。「方向かと思います」→「勘違いかと思います」 ええ。この間、Java のほうでほぼ同じ話がありましたが、CLR という魔法の箱が何をしているのか、わかりにくいのかな、と。 そこの理解を促すのは Microsoft の責任なのか。あるいは、まず理解してから使わない開発者の責任なのか。 後者のような気がするんだけどなぁ。。。 (これくらい書いておけば、質問者も気がついてくれますかね?) |
1|2|3
次のページへ»