【问题标题】:More efficent and quickier way to generate numbers and insert into db生成数字并插入数据库的更有效和更快的方法
【发布时间】:2013-08-02 05:26:41
【问题描述】:

大家好,我有以下代码,用于生成电话号码并将其插入数据库中的表中。要生成代码,它会在数据库中的表格中查看需要为某个范围生成哪些“F”数字。因此,例如“01132 21”的利兹范围,需要为 1、3、4 和 6 生成数字。因此生成的数字将类似于 01132211000-01132211999、01132213000-01132213999 等。

这是按我的意愿和预期工作的。然而,这需要相当长的时间(需要 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();
            }
        }
    }
}

【问题讨论】:

    标签: asp.net-mvc entity-framework c#-4.0 entity-framework-4


    【解决方案1】:

    简单的答案:使用存储过程

    您当前的解决方案将产生数千次数据库往返,因为每个数字都将插入单独的数据库调用中。

    您也可以考虑批量准备数据并使用SqlBulkCopy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多