我對數據表有成本問題。我需要用更聰明的代碼替換代碼。用於訪問數據表記錄的C#代碼優化
我有一個數據表和樣品值是這樣的:
列:ID,USER_ID,開始時間,結束時間
行樣品:1,5,08 05.10.2009:00:00,05.10 0.2009 17:00
我的僞代碼是
function something()
{
for(int i=0;i<datatable.Rows.Length;i++)
{
if(Someobject.variable.Equals(dt.Rows[i][user_id].ToString()))
{
if(Date.Compare(somevariable,dt.Rows[i][starttime].ToString())!=0)
{
//Do something
}
}
}
}
這是類似的東西。數據表有超過一千行,並且在加載asp.net頁面時,這些函數必須被調用近一千次。
所以我必須改變它。
我認爲使用字典,但它似乎只需要兩個變量。你能告訴我什麼?
編輯:
我還沒有解決問題。這是相關的代碼。提前致謝。
保護無效RadScheduler_Randevu_TimeSlotCreated(對象發件人,Telerik.Web.UI.TimeSlotCreatedEventArgs E) {
for (int i = 0; i < calismaSaatleridt.Rows.Count; i++)
{
if (RadScheduler_Randevu.SelectedView.Equals(SchedulerViewType.DayView))
{
if (RadScheduler_Randevu.SelectedDate.ToShortDateString().Equals(Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_baslangic"]).ToShortDateString()))
{
if (e.TimeSlot.Resource.Key.ToString().Equals(calismaSaatleridt.Rows[i]["hekim_id"].ToString()))
{
if (DateTime.Compare(e.TimeSlot.Start, Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_baslangic"])) < 0 || DateTime.Compare(e.TimeSlot.End, Convert.ToDateTime(calismaSaatleridt.Rows[i]["calisma_bitis"])) > 0)
{
e.TimeSlot.CssClass = "Disabled";
}
}
}
}
}
}
這是返回結果集的功能。
private DataTable calismaSaatiGetir(string yonetici_id)
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlCommand command = new SqlCommand();
command.CommandText = "select calisma_saati.id,kullanici.id as hekim_id,LEFT(CONVERT(VARCHAR,calisma_saati.tarih,104),10)+ ' ' +LEFT(CONVERT(VARCHAR,calisma_saati.baslangic_saati,108),5) AS calisma_baslangic,LEFT(CONVERT(VARCHAR,calisma_saati.tarih,104),10)+ ' '+LEFT(CONVERT(VARCHAR,calisma_saati.bitis_saati,108),5) AS calisma_bitis from calisma_saati JOIN kullanici ON kullanici.id=calisma_saati.kullanici_id WHERE yonetici_id='" + Session["yonetici"].ToString() + "' ";
command.Connection = connection;
connection.Open();
SqlDataAdapter da = new SqlDataAdapter(command.CommandText, connection);
DataSet ds = new DataSet();
da.Fill(ds, "calisma_saati");
calismaSaatleridt = ds.Tables["calisma_saati"];
connection.Close();
return calismaSaatleridt;
}
是的,我絕對同意你說,循環是真正的問題。情況是這樣的:我有一個radscheduler組件,它有一個時間段創建事件。在頁面加載時,我需要根據用戶檢查該時間段是啓用還是禁用。這個活動被稱爲近千次。所以我不能改變它。我必須做的是儘可能快地從數據表或其他東西中獲得。我明天可以粘貼示例代碼和示例數據,但現在我沒有。謝謝你的回答。 – 2009-10-05 19:09:09
在這種情況下,您可能希望在獲取數據表後儘快創建一個字典,並將其保存在好的和公開的地方,以便您不必爲此返回數據庫。 – 2009-10-05 20:57:34