in ASP.Net mit C#, Ich bevölkere eine ASP.Net Menüsteuerung aus der Datenbank dynamisch. Ich versuche, diese Gegenstände unbrauchbar zu machen, die einige Kindergegenstände darunter haben. Damit wird sichergestellt, dass auf Mobilgeräten, bei denen wir keine Maus zum Überfahren haben, beim Anklicken des übergeordneten Menüelements der Benutzer sicher Kindelemente anstelle eines Postbacks erhält. Der folgende Code funktioniert gut, aber mit einem Nachteil, es dauert zu viel Zeit zu laden und in der Zwischenzeit zeigt ein schlechtes Ergebnis durch die Anzeige aller Elemente (alle Eltern + alle Kind) vertikal in einer einzigen Ansicht.Datenbankgesteuerte Menü ist zu langsam
SqlCommand com = new SqlCommand("SELECT * FROM menutab order by sno", c.con);
if(c.con.State == ConnectionState.Closed)
c.con.Open();
da = new SqlDataAdapter(com);
table = new DataTable();
da.Fill(table);
parents = new int[table.Rows.Count];
for (int i = 0; i < table.Rows.Count; i++)
if (table.Rows[i].ItemArray.GetValue(2).ToString() != String.Empty)
parents[i] = Convert.ToInt32(table.Rows[i].ItemArray.GetValue(2).ToString());
DataRow[] drowpar = table.Select("menu_parent = " + 0);
view = new DataView(table);
view.RowFilter = "menu_parent is NULL";
foreach (DataRowView row in view)
{
MenuItem menuItem = new MenuItem(row["item"].ToString(), row["sno"].ToString());
//menuItem.NavigateUrl = row["menu_url"].ToString();
for (int i = 0; i < parents.Length; i++)
{
if (Convert.ToInt32(row["sno"].ToString()) == parents[i])
{
menuItem.Selectable = false;
}
}
NavigationMenu.Items.Add(menuItem);
AddChildItems(table, menuItem);
}
private void AddChildItems(DataTable table, MenuItem menuItem)
{
DataView viewItem = new DataView(table);
viewItem.RowFilter = "menu_parent=" + menuItem.Value;
foreach (DataRowView childView in viewItem)
{
MenuItem childItem = new MenuItem(childView["item"].ToString(), childView["sno"].ToString());
//childItem.NavigateUrl = childView["menu_url"].ToString();
for (int i = 0; i<parents.Length; i++)
{
if (Convert.ToInt32(childView["sno"].ToString()) == parents[i])
{
childItem.Selectable = false;
}
}
menuItem.ChildItems.Add(childItem);
AddChildItems(table, childItem);
}
}
Kann dieser Prozess mit einer anderen Code-Implementierung schneller und zuverlässiger durchgeführt werden?
Wie langsam ist zu langsam? Welcher Teil des Codes ist langsam? – Bert
@Bert Evans Wie in der Beschreibung selbst erwähnt, ::: "es dauert zu viel Zeit zu laden und in der Zwischenzeit zeigt ein schlechtes Ergebnis durch die Anzeige aller Elemente (alle Eltern + alle Kind) vertikal in einer einzigen Ansicht." Wenn die Seite geladen wird, wird das vollständige Menü vertikal einschließlich aller übergeordneten und untergeordneten Elemente ohne Baum/Hierarchie angezeigt. Dann nimmt es die Form eines hierarchischen Menüs an und passt sich normal an. Dieser Prozess benötigt Zeit und die Nutzerimpressionen werden schlecht. Ich debuggte den Code und stellte fest, dass der Oops zu oft ausgeführt wird und die Verarbeitungszeit somit höher ist. – ITSagar