Я пытаюсь заполнить таблицу базы данных 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](https://i.stack.imgur.com/DZs1v.png)
Другие вопросы, которые могут представлять интерес:
- У меня отключена беспроводная сеть, поэтому Microsoft не вынуждает обновлять ее в одночасье, пока VS VS былвыполняется.
- Текстовые файлы находятся в той же папке, что и файл Startup.cs
- Я использую .NET Core 2.2 и EntityFrameworkCore (2.2.6)
- Память VBCSCompilerиспользование в 85 раз больше, чем 8500 МБ.
- Другие записи, которые были показаны как имеющие высокое энергопотребление в окне диспетчера задач, былиVisual Studio и Система.Удивительно, но SQL Server VSS Writer, показанный на скриншоте, имел «очень низкое» энергопотребление.
- Я использую VS 2017 Enterprise edition.
- Я мог бы пройтись по коду без ошибок компиляции до того, какбыла применена миграция.
- Моя машина медленно реагирует, но после запуска программы не происходит сбой (что указывает на отсутствие бесконечных циклов или утечек памяти).
Мне интересно, стоит ли мне дольше ждать завершения программы?Может кто-нибудь объяснить, в какой «фазе» находится Visual Studio в настоящее время?Это "застряло" в какой-то строке кода?Я мог бы успешно пройтись по коду, прежде чем применить миграцию «seed-large-db» для заполнения своей базы данных.Применение миграции «seed-large-db», по-видимому, успешно создало файл (размер файла более 800 МБ).
Пожалуйста, расскажите мне о вещах, которые я не могу знать при первой миграции кода, внутренняя работа Visual Studio,локальный экземпляр сервера SQL и т. д.