簡體   English   中英

需要幫助,循環到數據庫花費的時間太長

[英]Need Help, looping to database takes too long

我想尋求有關導致此代碼處理時間過長的幫助:

using (OleDbDataReader dr = command.ExecuteReader()){
      while (dr.Read())
      {
          count += 1;
     if (Convert.ToDecimal(dr["AMOUNT"]) ==     Convert.ToDecimal(0.00) &&
     Convert.ToDecimal(dr["PENALTY"]) == Convert.ToDecimal(0.00) && Convert.ToDecimal(dr["DEPDIV"]) == Convert.ToDecimal(0.00))
      {
          //Cancel Upload and let user check is .DTLS contains Amount
          ViewBag.Message = "UPLOADING CANCELLED!! : .DTLS file does not contain any amount for the Following Fields :"
       + "AMOUNT UNPAID, "
       + "PENALTY "
       + "DEPDIV "
       + "PLEASE CHECK INGRES SETTING FOR MONEY FORMAT(REQUIRED MONEY FORMAT IS : II_MONEY_FORMAT=L:á"
       + "THEN REDOWNLOAD THE .MAST and DTLS FILE from the DELINQUENT EMPLOYERS EXTRACTION UTILITY BEFORE UPLOADING";

          return View();
      }
      else
      {
          string Acctno, EyerID, Percov;
          decimal Amount, Penalty, DepDiv;

          EyerID = dr["EYERID"].ToString().Trim();
          Percov = dr["PERCOV"].ToString().Trim();
          Amount = Convert.ToDecimal(dr["AMOUNT"]);
          Penalty = Convert.ToDecimal(dr["PENALTY"]);
          DepDiv = Convert.ToDecimal(dr["DEPDIV"]);
          Acctno = SaveUpdateTransMaster.spRetrieveAcctNo(EyerID, brid, "MCDEL", Convert.ToDateTime(currCutoff));

          ListLedger.Add(new TransLedger
          {
              EyerID = EyerID,
              AcctNo = Acctno,
              Percov = Percov,
              AmtDue = Amount,
              Penalty = Penalty,
              DepDiv = DepDiv,
          });
      }
  }
}

"MCDEL");
}

foreach (var row in ListLedger)
{
   SaveUpdateTransMaster.spUploadTransLedgerCA(row.AcctNo, row.EyerID, 
   currCutoff, row.Percov,Convert.ToDecimal(row.AmtDue), Convert.ToDecimal(row.Penalty), 
   Convert.ToDecimal(row.DepDiv), brid, "MCDEL");
}

這是我的情況:

我通常將數以百萬計的行提取到FoxPRO DBF,將其存儲到列表中,然后通過StoredProc將其循環插入到DB中。

看來您正在復制某些代碼。 創建每一行時,您將金額,罰款和DepDiv轉換為小數,然后在上載時再次將這些字段轉換為小數。 另外,您正在if語句的條件部分中計算它們。 您可能應該在if語句之前計算每一行的值,以減少某些代碼重復並節省時間。 即使每行僅節省一毫秒,也就相當於每百萬行17分鍾。

但是,正如艾倫·B(Alan B)所建議的那樣,也許您可​​以發布Foxpro查詢的代碼,我們可以着眼於此以提高速度和/或數據格式。 查詢也可能會更改為輸出您可以直接導入到SQL Server的內容,例如逗號或制表符分隔的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM