【发布时间】:2013-11-18 10:19:14
【问题描述】:
我已经使用 MvcSiteMapProvider 设置了一个面包屑。 我有一个结构,它有一些静态节点,然后在一些叶子上有使用 asp.net-attribute 添加的动态节点。
[MvcSiteMapNode(DynamicNodeProvider = "Web.DealerNet.CommonFramework.UserDynamicNodeProvider)]
“工作”很好,但是当您深入了解时,性能真的很差,因为在启动时所有用户都被加载到内存中,并且为每个用户创建了一个节点。 这是official docu 中建议的方法。有没有办法在这里使用延迟加载? (当它真正被调用时加载用户对象的属性,而不是为每个用户创建一个节点......我在那里有大约 20k 个用户......)
public class UserDynamicNodeProvider : DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
UserDao dao = DependencyResolver.Current.GetService<UserDao>();
// Create a node for each element
foreach (User user in dao.GetAll())
{
DynamicNode dynamicNode = new DynamicNode();
dynamicNode.Title = user.UserName;
dynamicNode.Description = user.UserName;
dynamicNode.RouteValues.Add("id", user.IdUser);
dynamicNode.ParentKey = "TheParentKey";
dynamicNode.Clickable = false;
dynamicNode.Area = "MyArea";
yield return dynamicNode;
}
}
}
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 mvcsitemapprovider asp.net-mvc-sitemap