C#动态站点地图内存泄漏

Ali*_*san 2 c# sitemap asp.net asp.net-4.0 c#-4.0

我有我的站点地图的用户控件,其中包含以下ascx:

<asp:SiteMapPath id="SiteMapPath1"runat="server" RenderCurrentNodeAsLink="true" />
Run Code Online (Sandbox Code Playgroud)

在我的网站的每个页面上调用此站点地图控件.

并且用户控制代码背后:

private void Page_Load(object sender, EventArgs e)
{
    SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ExpandForumPaths);
}
private SiteMapNode ExpandForumPaths(Object sender, SiteMapResolveEventArgs e)
{
    SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
    SiteMapNode tempNode = currentNode;

    if (0 != postID)
    {
        tempNode.Url = tempNode.Url + "?PostID=" + postID.ToString();
    }

    if ((null != (tempNode = tempNode.ParentNode)) &&
        (0 != forumID))
    {
        tempNode.Url = tempNode.Url + "?ForumID=" + forumID.ToString();
    }

    if ((null != (tempNode = tempNode.ParentNode)) &&
        (0 != forumGroupID))
    {
        tempNode.Url = tempNode.Url + "?ForumGroupID=" + forumGroupID.ToString();
    }

    return currentNode;
}
Run Code Online (Sandbox Code Playgroud)

问题是它每页负载消耗1-2个RAM,并且不会释放内存.例如,如果我刷新页面2 mb添加到w3wp.exe,它会不断增长.

   SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ExpandForumPaths);
Run Code Online (Sandbox Code Playgroud)

我确实认为上面的行是每次使用我的用户控件时创建一个新的事件处理程序导致问题.

问题此动态站点地图的方法失败.有没有其他方法可以不消耗内存,或者我做错了什么?

m0s*_*m0s 5

http://netpl.blogspot.com/2008/04/sitemapresolve-and-dynamic-site-map.html

根据上面的文章,在每个Page_Load上添加一个新的SiteMapResolveEventHandler,因为SiteMapResolve是静态的,似乎是不必要的过多内存分配的一个很好的理由.文章也有一个解决方法.