2011-09-01 16 views
0

大家好,我有以下代碼,它用於生成電話號碼,並將它們插入到數據庫中的表中。要生成代碼,它會在數據庫中的表中查看哪些「F」位數字需要爲範圍生成。因此,例如「01132 21」的利茲範圍需要產生1,3,4和6的數字。所以產生的數字將會像01132211000-01132211999,01132213000-01132213999等。更高效,更快捷的方式來生成數字和插入db

這是工作的我想要和預期的一樣。然而,這需要相當長的時間(12小時產生120,000條記錄,我估計我們可能會產生大約100萬條記錄,只是想知道是否有更快的方法來做我想做的事情,我仍然是一個「綠色」開發人員,所以真的不知道做的事情相當,但最好的辦法

private TelephoneNumberManagementEntities context = new TelephoneNumberManagementEntities(); 

public ActionResult Index() 
{ 
    var list = context.TempNumberImports.ToList(); 
    foreach (var item in list) 
    { 
     string range = item.Range.ToString().Trim().Replace(" ",""); 

     if (item.C0 == "Y") 
     { 
      GenerateNumbers(range, 0, 999, item.ID); 
     } 
     if (item.C1 == "Y") 
     { 
      GenerateNumbers(range, 1000, 1999, item.ID); 
     } 
     if (item.C2 == "Y") 
     { 
      GenerateNumbers(range, 2000, 2999, item.ID); 
     } 
     if (item.C3 == "Y") 
     { 
      GenerateNumbers(range, 3000, 3999, item.ID); 
     } 
     if (item.C4 == "Y") 
     { 
      GenerateNumbers(range, 4000, 4999, item.ID); 
     } 
     if (item.C5 == "Y") 
     { 
      GenerateNumbers(range, 5000, 5999, item.ID); 
     } 
     if (item.C6 == "Y") 
     { 
      GenerateNumbers(range, 6000, 6999, item.ID); 
     } 
     if (item.C7 == "Y") 
     { 
      GenerateNumbers(range, 7000, 7999, item.ID); 
     } 
     if (item.C8 == "Y") 
     { 
      GenerateNumbers(range, 8000, 8999, item.ID); 
     } 
     if (item.C9 == "Y") 
     { 
      GenerateNumbers(range, 9000, 9999, item.ID); 
     } 
    } 
    return View(); 
} 

public void GenerateNumbers(string range, int startNo, int endNo, int rangeID) 
{ 
    Number num = new Number(); 
    for (int i = startNo; i <= endNo; i++) 
    { 
     if (startNo == 0) 
     { 
      string tempNum = range + i.ToString("D4"); 
      var record = context.Numbers.FirstOrDefault(m => m.Number1 == tempNum); 
      if (record == null) 
      { 
       num.Number1 = tempNum; 
       num.RangeID = rangeID; 
       num.StatusID = 1; 
       num.ImportDate = DateTime.Now; 
       num.ImportSource = "Number Ranges 250811.xlsx"; 
       context.Numbers.Add(num); 
       context.SaveChanges(); 
      } 
     } 
     else 
     { 
      string tempNum = range + i; 
      var record = context.Numbers.FirstOrDefault(m => m.Number1 == tempNum); 
      if (record == null) 
      { 
       num.Number1 = tempNum; 
       num.RangeID = rangeID; 
       num.StatusID = 1; 
       num.ImportDate = DateTime.Now; 
       num.ImportSource = "Number Ranges 250811.xlsx"; 
       context.Numbers.Add(num); 
       context.SaveChanges(); 
      } 
     } 
    } 
} 

回答

1

答案很簡單:使用存儲過程

您當前的解決方案會產生數以千計的數據庫的往返,因爲每一個數字會插入單獨的數據庫調用中。

也可以考慮將批數據準備好並使用SqlBulkCopy