質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • VB.NET

    1058questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • ASP.NET

    625questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • IIS

    208questions

    IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

WEBアプリでIISのプロセスからメモリを解放するには

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 8,408

tarinko

score 8


アプリケーション:asp.net 

言語:vb.net 

上記環境でWEBアプリを開発しています。
画面遷移などでsessionにデータを溜める作りにしています。
どのぐらいアプリケーションサーバが耐えられるか
試してみたくて、テスト環境で大量データを
段階的にサイズを増やしてセッションに格納しました。

アプリケーションサーバでテストする前に
自分の端末でvisualStudioの機能を使い
セッションがちゃんと増えるか
増えたセッションがちゃんと消えるかを稼働確認しました。

例)ループを100回行ってセッション変数名に
session("XXXX"+カウンタ変数)」とつけ若干大きいデータを格納。
ループ後デバッグで中に入っていることを確認。
廃棄用のボタンを用意して、それを押すと
同じ様にループして、1個ずつsession("XXXX"+カウンタ変数).remove
デバッグで何も取れない事を確認。

格納と廃棄が確認出来たので、
アプリケーションサーバにリリースして実行しました。
すると、メモリがモリモリ増えていき
わーすごいなぁーと、のほほんと見ていたのですが、
いざ廃棄用のボタンを押してもメモリが減りませんでした。

とりあえずアプリケーションプールをリサイクルして
元に戻したので問題は無いのですが・・・。

sessionの破棄についてネットで検索したり
参考書を読むとremoveやremoveallなどやりなさいと書いてありますが
実は意味が無いのでしょうか?
なんのためのremoveなんですか?
それともiisが何か影響しているのでしょうか?
iisの設定はほぼデフォルトでセッションの時間を
少し長くしたぐらいです。inprocにしています。

理由がわかる方がいらっしゃいましたら
教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

.NET のメモリ開放について調べたことがあるので、回答させて頂きます。

.NET はメモリ管理が自動化されており、オブジェクトへの参照がなくなる事で
メモリが解放されます。

(Session の Remove により格納したデータへの参照がなくなります)

しかし、空きメモリとして再割り当て可能になるには、ガーベージコレクションが
実行されるのを待たなければなりません。

ベージ コレクションの条件

通常、ガーベージコレクションの手動実行は不要ですが、テスト的にメモリ開放を
リアルタイムで確かめたい場合は、手動実行してみると良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/08 19:25

    回答ありがとうございます。
    ガーベージコレクションを手動実行で開放確認出来ました!
    結構メモリ食ってたから条件に該当するのかと思ったのですが
    見てたメモリの箇所が悪かったんでしょうかね。

    キャンセル

0

具体的にどんな処理でセッションを破棄しようとしたのか不明なので、具体的なことは何も書けませんが…

テスト環境と異なり、サーバ上では処理が非常に速くて、セッションの破棄が間に合わなかっただけでは?

visualStudioの機能を使い

とのことですが、VisuialStudio等のIDE(=統合開発環境)で デバッグ する場合、デバッガーがアプリの動作に随時割り込みを掛けることでアプリの状態を(任意の時点で)把握できるようになっています。

ですから、単純なループ処理でも、明示的にブレークポイントを設定しないと処理自体は停止しませんが、常に 割り込み が掛けられている状態であり、セッション破棄などの 別の処理 が割り込む余地が生まれやすいです。

一方、サーバ上でデバッガーの管理下にないアプリがループ処理を実施する場合、途中に 適切な wait を挟まないと一気に処理が進んでしまい、別の処理が割り込む余地のない場合も有ります。

メモリがモリモリ増えていき

とのことですが、メモリ使用量の表示が実際の状況に追いついていない(実際の使用量の増加はもっと速い)という場合もあり得ます。言い換えると、メモリ使用量の増加を目で確認した時点では、ループ処理が殆ど終わってしまっている可能性もあり得ます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/08 19:22

    回答ありがとうございます。
    試そうと思ってそのまま忘れていた為返事が遅れました。
    waitやループではなく一括等で対応してみましたが
    変わりありませんでした。

    キャンセル

同じタグがついた質問を見る

  • VB.NET

    1058questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • ASP.NET

    625questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • IIS

    208questions

    IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。