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

标签 c# asp.net c#-4.0 asp.net-4.0 sitemap

我有我的站点地图的用户控制,它在 ascx 中有以下内容:

<asp:SiteMapPath id="SiteMapPath1"runat="server" RenderCurrentNodeAsLink="true" />

我网站的每个页面都会调用此站点地图控件。

以及后面的用户控制代码:

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;
}

问题是它在每次加载页面时消耗 1 - 2 MB 的内存,并且没有释放内存。例如,如果我刷新页面,2 MB 会添加到 w3wp.exe,它会继续增长。

   SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ExpandForumPaths);

我确实相信上面的行是通过在每次使用我的用户控件时创建一个新的事件处理程序而导致问题的。

问题 这种制作动态站点地图的方法失败了。有没有其他方法可以在不消耗内存的情况下做到这一点,还是我做错了什么?

最佳答案

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

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

关于C# 动态站点地图内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11232684/

相关文章:

c# - 如果我想在我的数据库中找到准确的搜索结果,我应该使用什么来代替 "FirstOrDefault()"?

c# - Windows 8 - .NET TCP AcceptAsync 回调未触发(被 Console.ReadLine() 阻止)

c# - 带有 MVVM 和 Prism 的 ResourceDictionary

c# - 初始化属性时的问题

c# - 设置类的返回值

字符串数据类型的 C# 扩展方法

.net - .NET 代码如何知道它是否在 Web 服务器应用程序中运行?

c# - 如何从自定义成员资格提供程序中处理自定义对象

c# - 通过编程 Linq/Lambda 创建订单

c# - "is"c# 多个选项