C# c远程服务器管理器和COM代理示意图

C# c远程服务器管理器和COM代理示意图,c#,.net,iis,servermanager,dllhost,C#,.net,Iis,Servermanager,Dllhost,我使用以下方法在一个漂亮的网页上显示IIS工作请求,但是每次刷新该网页时,都会增加目标计算机上dllhost COM代理的内存消耗,直到没有更多可用内存为止。 说到C,我是个初学者,所以我希望有人能向我解释一下,如何在目标服务器每次刷新时更改此代码以释放其内存占用 protected void Page_Load(object sender, EventArgs e) { manager = ServerManager.OpenRemote("Lonappu01032");

我使用以下方法在一个漂亮的网页上显示IIS工作请求,但是每次刷新该网页时,都会增加目标计算机上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++;
        }

    }
}
第一部分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版本的不同,似乎存在一个可能无法修复的已知错误。请参见此处示例使用和报告的错误:

谢谢Hubson,现在我已经实现了另一个问题,即更改我的网页会抛出一个“System.NullReferenceException:对象引用未设置为对象的实例”。这是导致问题的行,现在知道是什么导致了这个问题吗?:总的工作进程,requestshard说,没有更多细节,例如,这与问题中显示的代码有什么关系。我建议你对此提出一个新问题,因为这是一个不同的问题。