Заполнение базы данных .NET Core из текстового файла - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь заполнить таблицу базы данных SQL (сервер локального хоста) с именем Contacts, содержащей около 200 000 записей контактов, чтобы проверить мою эффективность поиска в C #.Я использую .NET Core 2.2 и заполняю базу данных с помощью подхода, основанного на коде.Чтобы получить 200 000 записей, у меня есть текстовый файл с примерно 450 именами и еще один текстовый файл с еще 450 фамилиями.Затем я зацикливаюсь на этих двух файлах, используя StreamReader (код ниже) для создания контактных объектов

// Model
public class Contact
{
    public int Id {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

public void Configure(EntityTypeBuilder<Contact> builder, int recordCounter)
{
    builder.ToTable("Contacts");
    builder.HasKey(t => t.Id);
    builder.Property(t => t.Id).ValueGeneratedOnAdd().IsRequired();
    builder.Property(t => t.FirstName).IsRequired();
    builder.Property(t => t.LastName).IsRequired();

    using (StreamReader sr = new StreamReader(@".\FirstName.txt")) 
    {
        string firstName;
        // Read and display lines from the file until the end of 
        // the file is reached.
        while ((firstName = sr.ReadLine()) != null) 
        {
            using (StreamReader sr2 = new StreamReader(@".\LastName.txt")) 
            {
                string lastName;
                // Read and display lines from the file until the end of 
                // the file is reached.
                while ((lastName = sr2.ReadLine()) != null) 
                {
                    // negative value Id to avoid collision with non-seed data
                    builder.HasData(new Contact
                        {
                            Id = -(recordCounter),
                            FirstName = firstName,
                            LastName = lastName
                        }
                    );
                    recordCounter++;
                }
            }
        }
    }
}}

Я фиксирую количество записей контактов и использую это для перебора еще двух файлов с именем StreetName.txt иCityState.txt, чтобы создать один адрес для каждой записи контакта.Переданный счетчик записей контактов увеличивается в цикле и присваивается в качестве внешнего ключа для таблицы адресов.

Аналогичным образом я создаю телефонные номера (используя генератор случайных чисел) и записи электронной почты для контактов и вставляю их вТаблицы телефонов и электронных писем, в которых число записей Контактов увеличивается и передается как внешний ключ.

Проблема, с которой я столкнулся, показана на снимке экрана ниже.

enter image description here

Другие вопросы, которые могут представлять интерес:

  1. У меня отключена беспроводная сеть, поэтому Microsoft не вынуждает обновлять ее в одночасье, пока VS VS былвыполняется.
  2. Текстовые файлы находятся в той же папке, что и файл Startup.cs
  3. Я использую .NET Core 2.2 и EntityFrameworkCore (2.2.6)
  4. Память VBCSCompilerиспользование в 85 раз больше, чем 8500 МБ.
  5. Другие записи, которые были показаны как имеющие высокое энергопотребление в окне диспетчера задач, былиVisual Studio и Система.Удивительно, но SQL Server VSS Writer, показанный на скриншоте, имел «очень низкое» энергопотребление.
  6. Я использую VS 2017 Enterprise edition.
  7. Я мог бы пройтись по коду без ошибок компиляции до того, какбыла применена миграция.
  8. Моя машина медленно реагирует, но после запуска программы не происходит сбой (что указывает на отсутствие бесконечных циклов или утечек памяти).

Мне интересно, стоит ли мне дольше ждать завершения программы?Может кто-нибудь объяснить, в какой «фазе» находится Visual Studio в настоящее время?Это "застряло" в какой-то строке кода?Я мог бы успешно пройтись по коду, прежде чем применить миграцию «seed-large-db» для заполнения своей базы данных.Применение миграции «seed-large-db», по-видимому, успешно создало файл (размер файла более 800 МБ).

Пожалуйста, расскажите мне о вещах, которые я не могу знать при первой миграции кода, внутренняя работа Visual Studio,локальный экземпляр сервера SQL и т. д.

...