首页 > 解决方案 > 递归地加速动态菜单的创建

问题描述

我有以下菜单结构

A
-B
-C
D
-E
--F

等等。A有孩子B, CD有孩子EE还有孩子F

我创建了一种递归渲染菜单的方法。但由于某种原因(我不知道)它变得非常慢

A, D = parent nodes, with parent = null

这是我的程序

1.获取所有 parent = null 的父节点,在本例中为 A 和 D。

2.为他们每个人检查他们是否有孩子。

2.1如果他们有孩子,请获取孩子并迭代他们1

2.2如果他们没有孩子,只需打印它们,然后转到下一项。

我可以对此应用某种记忆吗?

这是C#代码

allMenus是所有可能的菜单。

@helper renderTree(IEnumerable<Menu> menus, IEnumerable<Menu> allMenus)
        {
            foreach (var item in menus)
            {
                var result = item.MenuName;

                //if has childs
                if (allMenus.Where(m => m.ParentID == item.MenuID).Any())
                {
                    <li class="treeview">
                        <a href="#">
                            <i class="@item.IconName"></i>
                            <span>
                                @{
                                    @Html.Raw(result);

                                }
                            </span>
                            <i class="fa fa-angle-left pull-right"></i>
                            <ul class="treeview-menu">
                                @{
                                    // get the childs
                                    var childs = allMenus.Where(m => m.ParentID == item.MenuID); 
                                    @renderTree(childs, allMenus);
                                }
                            </ul>
                        </a>
                    </li>
                }
                else
                {
                    <li>
                        <a href="@Url.Action(@item.ActionName, @item.ControllerName, new { area = @item.AreaName }, null)">
                            <i class="@item.IconName"></i>
                            <span>@Html.Raw(result)</span>
                        </a>
                    </li>
                }
            }
        }

标签: c#algorithm

解决方案


推荐阅读