Во-первых, я очень хорошо знаю, что есть много других статей, посвященных точной теме. Однако эти статьи старые. Например,Вложение Entity Framework 6 слишком медленное
Entity Framework is Too Slow. What are my options? это 4 года назад, и я предполагаю, что в рамках этой платформы было выпущено хотя бы одно крупное обновление версии, поэтому я надеюсь, что что-то новое и полезное поможет мне в этой теме.
Так что моя проблема в деталях, как это:
У меня есть источник данных, который я должен разобрать и вставить результаты в SQL Server. Поскольку разбор происходит так быстро, я думаю, что накладные расходы, очевидно, связаны с инфраструктурой сущности.
Мне нужно вставить данные в несколько десятков таблиц, около 80 из них. Каждая таблица имеет 8 столбцов, скажем, в среднем, среди которых есть столбец с автоинкрементным идентификатором. И каждый раз мне нужно вставить несколько тысяч строк в 20 таблиц. Поэтому некоторые таблицы огромные (возможно 100k строк?)
Таблицы имеют отношение между ними, что это просто форма звезды отношение, как это:
table5 table6 \ / table3-----------\ \//-----------------table4 table1 ------------ record table ------------------ table2
только представьте, основная таблица имеет 80 таблиц, вокруг него , 90% отношения - это 1-ко-многим, некоторые многие ко многим, ограниченные друг к другу.
Способ ввода: я добавляю весь результат в контекст с помощью метода AddRange
, и я звоню SaveChanges
раз в глобальном масштабе.
Я наблюдал эффективность ввода в текущих настройках, и я нашел в самом начале, вставка занимает несколько секунд, а затем минуты, теперь требуется 30 минут для вставки данных примерно в том же размере.
Итак, мой вопрос в том, что есть ли хороший способ повысить скорость вставки? Мне известно о массовой вставке, но у меня есть отношение наследования, поэтому я ищу любой другой способ, который не нарушит ограничение отношения.
Любые хорошие предложения или рекомендуемые хорошие профилировщики? Или это поможет в этой ситуации, если я определяю хранимую процедуру для обслуживания цели вставки? Извините, но на самом деле я только что узнал об этом в течение нескольких недель и ожидал, что это правильный инструмент для использования в бизнес-логике. Так голый со мной, если есть что-то, что хорошо известно в сообществе.
Entity Framework, как ORM, умеет конвертировать таблицы в данные и наоборот. Однако преобразование данных из некоторого источника данных в объект только для его повторного преобразования в другое хранилище данных ужасно неэффективно. Были предприняты усилия, направленные на улучшение такого рода деятельности, но большинство согласны с тем, что это не совсем то, что должно быть сделано в любом виде ОРМ. – Claies
@ Claies да, я согласен с тобой, и ни один мой босс не согласен с тобой. Я вынужден разбирать некоторые необработанные данные и помещать их в RMDBS, поэтому мне нужно будет сопоставить данные с реляционными данными для него и других ребята, чтобы запросить их в любом случае. поэтому, пожалуйста, сценарий не так уж важен. Я имею в виду, что конструкция данных и отношений здесь достаточно проста.Надеюсь, что я смогу получить помощь в том, как улучшить производительность вместо комментариев к архитектуре, и я ничего не могу изменить. пожалуйста, сосредоточьтесь только на моей проблеме. – HuStmpHrrr
@Claies FYI, необработанные данные - это текст, читаемый человеком, и мне нужно преобразовать их в какое-то отношение, что является чистой болезненной работой. поэтому в таком контексте я полностью согласен с вашей точкой зрения. – HuStmpHrrr