ascxに次のようなサイトマップのユーザーコントロールがあります。
<asp:SiteMapPath id="SiteMapPath1"runat="server" RenderCurrentNodeAsLink="true" />
このサイトマップコントロールは、私のWebサイトの各ページで呼び出されます。
そして、背後にあるユーザー制御コード:
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のRAMを消費し、メモリを解放していないことです。たとえば、ページを更新すると、2 mbがw3wp.exeに追加され、成長し続けます。
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ExpandForumPaths);
上記の行は、ユーザーコントロールが使用されるたびに新しいイベントハンドラーを作成することで問題を引き起こしていると思います。
質問動的サイトマップを作成するためのこの方法は失敗しました。メモリを消費せずにそれを行う他の方法はありますか、それとも私は何か間違ったことをしていますか?