- PR -

Session変数のメモリの開放方法は?

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-08-04 21:38
いつもお世話になっております。

セッション変数のメモリ開放の仕方なのですが
下記の処理でサーバ上のSession["KEY_AAA"]に割り当てられたメモリは
Session.Remove("KEY_AAA")で正しく開放されるのでしょうか。
よろしくお願いします。

Session["KEY_AAA"] = "1MBの内容"; ←ここで1MBの内容を格納(サーバ上のメモリが+1MB使用になる)

Session.Remove("KEY_AAA"); ← ここで1MBのメモリを開放(サーバ上のメモリが-1MBになる)

ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-04 22:57
  セッション変数について。超・初歩的ですがお願いします。
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-08-04 23:19
どうもありがとうございます。

Session["KEY_AAA"] = null;
Session.Remove("KEY_AAA");
GC.Collect();

これでよいのでしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-05 02:21
上記リンクのスレに
「気になるならば、GC.GetTotalMemoryを呼び出して調べてみてください。」
って書いてありますよ。

[追記]
スレの一番下に@IT内の記事にリンクがあったのか
「メモリが不足してくれば、自動的に回収が行われる。」とか
「メモリ管理に下手に手を出そうとすると、かえって効率を落とす可能性がある」
と書いてあるわけだ。

[ メッセージ編集済み 編集者: べる 編集日時 2006-08-05 11:38 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-05 09:12
引用:

未記入さんの書き込み (2006-08-04 23:19) より:

Session["KEY_AAA"] = null;
Session.Remove("KEY_AAA");
GC.Collect();

これでよいのでしょうか?


リンク先、知らない方には紛らわしいでしょうね。
ガベージ コレクションについて調べなさい -> GC.Collect について調べました。
になっていますから... (Collect メソッドを調べなさい、という意味ではなかったはず)

コストの高い、GC.Collect メソッドを呼び出すような実装は、普通はあり得ないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-08-07 11:13
みなさん色々とアドバイス有難うございます。

結局Sessionメモリの内容を開放するにはどうすれば
よいのでしょうか。
Session.Remove("KEY_AAA");
だけしといて、あとは.net任せで、メモリの開放をすれば
いいのでしょうか。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-07 11:23
紛らわしいリンクを貼ってしまったようですね。すいません。

私は、ASP.NET ではプログラム内で明示的にメモリ解放を行なう必要は無い、と考えています。

  ガベージ・コレクタを明示的に動作させるには?

上記ページに、
引用:

自動的なメモリ解放を行う機構は、ガベージ・コレクタと呼ばれ、解放する行為をガベージ・コレクションと呼ぶ。問題は、ガベージ・コレクションがいつ行われるかであるが、これはメモリが不足してきた場合や、明示的に動作を指示された場合にのみ行われる。つまり、メモリが潤沢に余っている場合には、プロセスの使用するメモリ量が増加するのが正常な動作である。そのままメモリ不足でプログラムが停止するのではないかと懸念する必要はない。メモリが不足してくれば、自動的に回収が行われる。

 そのため、プロセスが使用するメモリ量が増加しているとしても、通常はそれに対してプログラマー自身が何かの対処をする必要はない。むしろ、メモリ管理に下手に手を出そうとすると、かえって効率を落とす可能性がある。


とありますので。違うのかなぁ
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-08-07 12:40
引用:

Session.Remove("KEY_AAA");
だけしといて、あとは.net任せで、メモリの開放をすれば
いいのでしょうか。


ですね。
だいたい、メモリが気になるなら、Session だけ気にするのも変でしょう。
_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)