Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果应用程序在启动时创建并植入大约120k的记录,有没有办法加快应用程序的响应时间?_C#_Entity Framework_Loops_Foreach_Entity Framework 6 - Fatal编程技术网

C# 如果应用程序在启动时创建并植入大约120k的记录,有没有办法加快应用程序的响应时间?

C# 如果应用程序在启动时创建并植入大约120k的记录,有没有办法加快应用程序的响应时间?,c#,entity-framework,loops,foreach,entity-framework-6,C#,Entity Framework,Loops,Foreach,Entity Framework 6,在图书列表中,我有大约6万张唱片,而在阅读器中,我只有大约20张 现在,为了填充桥接表(多对多),我必须为每个BookList记录分配至少两个读卡器 已经完成,但在首次加载应用程序时,大约需要30秒 这正常吗 有没有办法加快速度 注意:这是要求,我必须这样做,这意味着我必须在第一次加载时播种数据,但我关心的是性能 foreach (var n in BooksList) //60k records { int innerLoopCounter = 0; foreach (v

在图书列表中,我有大约6万张唱片,而在阅读器中,我只有大约20张

现在,为了填充桥接表(多对多),我必须为每个BookList记录分配至少两个读卡器

已经完成,但在首次加载应用程序时,大约需要30秒

这正常吗

有没有办法加快速度

注意:这是要求,我必须这样做,这意味着我必须在第一次加载时播种数据,但我关心的是性能

foreach (var n in BooksList)   //60k records
{
    int innerLoopCounter = 0;

    foreach (var t in ReadersList)  //only 20 registered readers
    {
        BooksReadersList.Add(new BooksReaders() { BooksID = n.BooksID, ReaderID = t.ReaderID });

        innerLoopCounter++;

        if (innerLoopCounter > 2)   //should not be more than 2.
            break;
        
    }
}


BooksDbContext.BooksReaders.AddRange(BooksReadersList);

BooksDbContext.ChangeTracker.DetectChanges();

base.Seed(BooksDbContext);
BookReadersList是类型BookReaders的列表,它有3列(ID、Book\u ID、Reader\u ID)


BookList是一个类型图书列表,它有两列(ID,BookTitle),ReaderList是一个类型阅读器列表,它有两列(ID,ReaderName)。

我是根据问题中显示的代码猜的。我创建了BooksList和ReadersList的前两个reader的LINQ风格的笛卡尔产品,基于by to。我不知道这是否会更快,但它会减少用户代码的循环。希望EF能将其转换成一些高效的SQL。没有写出来的SqlBulkCopy或普通的旧SQL语句那么高效,但考虑到约束条件

var BooksReadersList = BooksList.SelectMany((b) => ReadersList.Take(2), 
    (book, readers) => readers.Select(reader => new BooksReader 
        { book.BooksID, reader.ReaderID }));

BooksDbContext.BooksReaders.AddRange(BooksReadersList);

BooksDbContext.ChangeTracker.DetectChanges();

base.Seed(BooksDbContext);

这还不足以对您的问题进行准确评估。我们不知道
BooksList
的类型,
n
的类型,或者
BooksReadersList
的类型。从您发布的代码来看,EF的行为是不可预测的。我怀疑您可以通过几个精心选择的SQL语句使整个过程几乎瞬间完成。六万条记录不算多,即使乘以20。请对您的问题进行更好的描述,我们可能会给您提供更好的解决方法。@RobertHarvey抱歉,让我重新措辞并解释一下。更新,Harvey先生。@Hereticsmonkey它以某种方式将时间缩短了约10秒。好极了