2010-07-13 32 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检查加载,计算和保存需要多长时间。然后你要改进哪一部分(并且可以告诉我们)。