現在、テーブルに格納されている値に基づいて、レポート グリッドにツールヒントを設定しています。これを行うのは、多数のグリッドと多数のツールチップがあり、ソース コードを更新せずにそれらすべてを 1 か所から簡単に管理できるためです。
私の質問。この方法でツールチップをロードするのと、すべてのツールチップを一度にロードして配列をループすることでロードするのとでは、どちらが高速ですか?
すべてのツールチップに対する 1 回の SP 呼び出しは、10-20 回よりも高速になるようです。この仮定は正しいですか?もしそうなら、配列またはリストでこれを行う方法の例を見ることができますか?
sqlconn.Open();
SqlCommand com = new SqlCommand("sp_ToolTipLookup", sqlconn) { CommandType = System.Data.CommandType.StoredProcedure };
SqlParameter pFieldName = new SqlParameter("@FieldName", "");
for (int i = 0; i < rptgrid.Columns.Count; i++)
{
pFieldName.Value = rptgrid.Columns[i].ToString();
com.Parameters.Add(pFieldName); //adding the field name to the SP
SqlDataReader data = com.ExecuteReader(); //Open the SP
if (data.Read()) rptgrid.Columns[i].ToolTip = data["ToolTip"].ToString(); //If there is a resulting Tooltip, apply it to the grid
data.Close();
com.Parameters.Remove(pFieldName);
}
sqlconn.Close();
リストを使用した例は、次のようになります (これがより高速である場合は、セッションごとに 1 回リストをロードして、メモリに保存するだけでよい可能性があります)。
sqlconn.Open();
SqlCommand com = new SqlCommand("Select * from ToolTips", sqlconn) { CommandType = System.Data.CommandType.Text };
SqlDataReader data = com.ExecuteReader();
List<ToolTip> tips = new List<ToolTip>();
while (data.Read())
{
tips.Add(new ToolTip { fieldname = data["FieldName"].ToString(), tooltip = data["ToolTip"].ToString() } );
}
for (int i = 0; i < rptgrid.Columns.Count; i++) //Changed to visible column to speed it up a bit.
{
for (int x = 0; x < tips.Count; x++)
{
if (rptgrid.Columns[i].Name == tips[x].fieldname)
{
rptgrid.Columns[i].ToolTip = tips[x].tooltip;
}
}
}
data.Close();
sqlconn.Close();