ASP.NetでC#を使用すると、データベースからASP.Netメニューコントロールを動的に読み込み中です。私はそれらの下にいくつかの子アイテムを持っているそれらのアイテムを使用不能にしようとしています。これは、親メニュー項目をクリックしたときにマウスを持ってはいけないモバイルでは、必ずポストバックの代わりに子アイテムを取得することになります。下のコードはうまくいきますが、欠点がありますが、ロードに時間がかかりすぎて、すべてのアイテム(すべての親+すべての子)を1つのビューに垂直に表示すると、悪い結果が表示されます。データベース駆動メニューが遅すぎる
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);
}
}
他のコードの実装では、このプロセスをより高速で信頼性の高いものにできますか?
どのように遅いですか?コードのどの部分が遅いのですか? – Bert
@Bert Evans説明it itelfで述べたように、:::「ロードするには時間がかかり、すべてのアイテム(すべての親+すべての子)を1つのビューに垂直に表示すると悪い結果が表示されます。ページがロードされると、ツリー/階層のないすべての親アイテムと子アイテムを含む完全なメニューが垂直に表示されます。次に、階層的なメニューの形を取り、正常に調整されます。このプロセスには時間がかかり、ユーザーのインプレッションが悪くなります。私はコードをデバッグし、oopsが何回も実行されていることが分かり、処理時間が増えました。 – ITSagar