我对自己的站点地图具有用户控制权,在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
根据上面的文章,由于SiteMapResolve是静态的,因此在每个Page_Load上都添加了一个新的SiteMapResolveEventHandler,这似乎是不必要的过多内存分配的一个好原因。文章也有解决方法。