2010-07-13 57 views
0

我有一個C#控制檯應用程序,它使用各種C#函數完成了一些計算後將數據上載到SQL Server數據庫中。現在問題在於計算和上傳一行數據需要將近1秒的時間,並且我必須以相同的方式上傳50,000行數據。使用C#控制檯應用程序上傳數據

請給我一個解決這個問題的方法。

P.S. :我正在使用stringbuilder來編寫單獨的插入語句並批量上傳。這個過程只需要1分鐘。


插入或更新到數據庫幾乎不需要任何時間,正如我在我的問題中提到的。大部分時間都在進行計算。我附上以下函數的代碼示例:

public void EsNoMinLim() 

{ 
     ds = new DataSet(); 
     ds = getDataSet("select aa.Country, aa.Serial_No from UEM_Data aa inner join (select distinct " + 
      "IId, Country from UEM_Data where Active_Status is null) bb on aa.iid = bb.iid where aa.Serial_No <> '0'").Copy(); 

     execDML("Delete from ProMonSys_Grading"); 

     StringBuilder strCmd = new StringBuilder(); 

     foreach (DataRow dRow in ds.Tables[0].Rows) 
     { 
      SiteCode = dRow["Country"].ToString(); 
      Serial_No = dRow["Serial_No"].ToString(); 

      ds_sub = new DataSet(); 
      ds_sub = getDataSet("select EsNo_Abs_Limit from EsNo_Absolute_Limit where Fec_Coding_Rate in "+ 
       "(select MODCOD from FEC_Master where NMS_Value in (select Top 1 FEC_Rate from "+ 
       "DNCC_Billing_Day where Serial_No = '" + Serial_No + "' and [Date] = (select max([Date]) "+ 
       "from DNCC_Billing_Day where Serial_No = '" + Serial_No + "')))").Copy(); 

      if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "") 
      { 
       Min_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]); 
      } 
      else 
      { 
       Min_EsNo = "a"; 
      } 

      if (Min_EsNo != "a") 
      { 
       ds_sub = new DataSet(); 
       ds_sub = getDataSet("select Top 1 modal_Avg_EsNo from DNCC_Billing_Day where " + 
        "Serial_No = '" + Serial_No + "' and [Date] = (select max([Date]) from DNCC_Billing_Day " + 
        "where Serial_No = '" + Serial_No + "')").Copy(); 

       if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "") 
       { 
        Avg_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]); 
       } 
       else 
       { 
        Avg_EsNo = "-1"; 
       } 

       ds_sub = new DataSet(); 
       ds_sub = getDataSet("select Top 1 Transmit_Power from ProMonSys_Threshold where Serial_No = '" + Serial_No + "'").Copy(); 

       if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "") 
       { 
        Threshold_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]); 
       } 
       else 
       { 
        Threshold_EsNo = "-1"; 
       } 

       getGrade = EsNoSQFGrading(Min_EsNo, Avg_EsNo, Threshold_EsNo); 

       strCmd.Append("insert into ProMonSys_Grading(SiteCode, Serial_No, EsNo_Grade) " + 
          "values('" + SiteCode + "','" + Serial_No + "','" + getGrade + "')"); 
      } 
     } 

     execDML_StringBuilder(strCmd); 
    } 
+6

沒有足夠的信息來回答問題。 – 2010-07-13 06:53:49

+0

平均每個數據塊有多大? – 2010-07-13 06:56:28

+1

使用分析器查看您的應用程序的大部分時間正在消耗並優化 – IordanTanev 2010-07-13 06:57:11

回答

0

找出過程的哪個部分是昂貴的。使用StopWatch檢查加載,計算和保存需要多長時間。然後你要改進哪一部分(並且可以告訴我們)。