3

IISワーカーリクエストをかなりのWebページに表示する次の方法がありますが、ページが更新されるたびに、使用可能なメモリがなくなるまで、ターゲットマシンのdllhost(COMサロゲート)のメモリ消費が増加します。私はC#に関しては初心者なので、このコードを変更してターゲットサーバーのメモリフットプリントをリフレッシュするたびに解放する方法を誰かが説明してくれることを願っていますか?

protected void Page_Load(object sender, EventArgs e)
{

    manager = ServerManager.OpenRemote("Lonappu01032");

    int filtered = Convert.ToInt32(Request.QueryString["filter"]);
    StringBuilder sb = new StringBuilder();

    foreach (WorkerProcess proc in manager.WorkerProcesses)
    {
        RequestCollection rc = proc.GetRequests(0);

        var selected = from r in rc
                       select r;
         if (filtered>0)
         {
             selected  = from r in rc
                                  where r.SiteId == filtered
                                  select r;

         }


        foreach (Request r in selected)
        {

            sb.AppendFormat("<tr><td><a href=\"?filter={8}\">{8}</a></td><td>{0}</td><td>{1}</td><td>{2}</td><td><img src=\"http://mobilust.net/onlines/iptoflag.aspx?ip={3}\" alt=\"{3}\" /> {3}</td><td>{4} ({5}s)</td><td>{6}</td><td>{7}</td></tr>", r.HostName, Server.HtmlEncode(r.Url), r.Verb, r.ClientIPAddr, r.PipelineState, TimeSpan.FromMilliseconds(r.TimeInState).TotalSeconds, r.CurrentModule, TimeSpan.FromMilliseconds(r.TimeElapsed).TotalSeconds, r.SiteId);
            RequestCount++;
        }

    }
}
4

1 に答える 1

0

最初の部分 (C# での一般的な推奨事項)

.NET では、IDisposable を実装するクラスを操作するときに、'using' 句を使用します。これを行うと、終了時に dispose メソッドが確実に呼び出されます。ServerManager クラスが IDisposable を実装しているのはたまたまです。それ自体で「すべき」で十分です。

したがって、以下のように「使用」を実装すると、問題が解決する場合があります。

protected void Page_Load(object sender, EventArgs e)
{

    using (var manager = ServerManager.OpenRemote("Lonappu01032"))
    {
        int filtered = Convert.ToInt32(Request.QueryString["filter"]);
        StringBuilder sb = new StringBuilder();

        foreach (WorkerProcess proc in manager.WorkerProcesses)
        {
            //your foreach remains unchanged
        }
    }
}

後編(必ずだけど)

ただし、使用している Windows / IIS のバージョンによっては修正できない既知のバグがあるようです。使用例と報告されたバグについては、こちらを参照してください: https://connect.microsoft.com/VisualStudio/feedback/details/722272/microsoft-web-administration-servermanager-memory-leak

于 2013-12-02T17:44:42.500 に答える