19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|||||||||||
1 | |||||||||||
Быстрое формирование списков большого количество данных30.08.2016, 12:05. Показов 1678. Ответов 16
Метки нет (Все метки)
Здравствуйте ув.Форумчане.
У меня вот такой вопрос: необходимо сделать быстрое формирование большого количества данных(порядка нескольких миллионов строк) в списки. У меня есть модели:
Добавлено через 5 минут Отдельные списки мне нужны для того, чтобы делать sqlbulkcopy этих самых данных
0
|
30.08.2016, 12:05 | |
Ответы с готовыми решениями:
16
Быстрое формирование Word документа. Методы Быстрое чтение большого массива данных с Excel в C++Builder Быстрое заполнение большого файла Максимальное быстрое создание большого файла |
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
30.08.2016, 13:50 | 2 |
ILKarina, т.е. наоборот ведь, из моделей на сервер!
Добавлено через 5 минут А Вы пробовали? Заполняете DataTable, настраиваете мэппинги и сохраняете. http://www.sqlteam.com/article... sql-server Медленно выходит?
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
30.08.2016, 14:34 [ТС] | 3 |
golubyatnikovtv, т.е. вы говорите что я могу просто так взять List<FileList> и закинуть bulk'ом в две таблицы?
Добавлено через 2 минуты У меня ведь каждый элемент filelist содержит observablecollection<br> а каждый элемент в observablecollection<br> содержится еще observablecollection<gr> Добавлено через 1 минуту И мне надо bulk'ом раскидать все observablecollection<br> в tableBR и все observablecollection<gr> в tableGR
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
30.08.2016, 14:41 | 4 |
ILKarina, ну не совсем уж так элементарно...
Формируете два DataTable'а из Ваших моделей, для первого создаете SqlBulkCopy, выполняете сохранение, затем то же самое для второго. Добавлено через 3 минуты Раскидайте их не bulk'ом а обычными foreach'ами в DataTable'ы. DataTable'ы уже подсовывайте в SqlBulkCopy.
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
30.08.2016, 15:38 [ТС] | 5 |
golubyatnikovtv, в том то и дело что foreach'ем долго раскидывается. ~50000 элементов обрабатывает полторы минуты.
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
30.08.2016, 15:40 | 6 |
Совсем не много.
Что именно Вы делаете, как обрабатываете, что "форматируете" (как Вы написали в первом посте)?
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
||||||
30.08.2016, 16:06 [ТС] | 7 | |||||
golubyatnikovtv,
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
30.08.2016, 16:12 | 8 |
ILKarina, кажется, что код, который Вы публиковали в первом посте уже не актуален.
Покажите код моделей и тот код, который полторы секунды выполняется. Не нужно комментировать, покажите как есть. 50000 элементов где? 1) filelist 2) filelist.bcollection 3) bitem.gcollection Я сам не смогу отгадать.
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
30.08.2016, 16:28 [ТС] | 9 |
golubyatnikovtv, кода под рукой нету. Проект на работе.
Задача такова: есть xml-файл с тысячами тегов <b></b>. Внутри <b> есть около 20-40 тегов <g></g>. Внутри <b> и <g> распознать атрибуты и занести в базу. Т.о. просто распарсить xml-ку и занести данные в бд. Распарсить я распарсил, с помощью модели в первом посте. Теперь надо список который получился в результате закинуть в бд. xml-файлов может быть очень много.
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
30.08.2016, 16:36 | 10 |
Это разовая задача? Даже если много файлов.
Ну когда будет доступ к коду покажите. Полторы секунды на 50000 элементов - это наверняка Вы что-то не так делаете. И вообще не понятно что там делается... List'ы что-ли из одного в другой перегоняются? Повторюсь, Вам нужно из данных сформировать DataTable (а не простые списки), чтобы воспользоваться SqlBulkCopy. Если задача разовая можно не заморачиваться с этим, возможно потеряете больше времени, чем просто вставить все данные через SqlCommand типа INSERT INTO ... VALUES ...
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
||||||
31.08.2016, 07:06 [ТС] | 11 | |||||
golubyatnikovtv,
Кликните здесь для просмотра всего текста
Вот этот кусочек кода обрабатывает несколько xml-ок ну очень долго
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
||||||
31.08.2016, 07:06 [ТС] | 12 | |||||
ну а с bulk'ом разобрался:
Кликните здесь для просмотра всего текста
~17 секунд на обрабатывание 50000 строк
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
31.08.2016, 10:54 | 13 |
ILKarina, т.е. сейчас данные нормально импортируются в БД, но осталась проблема с производительностью?
Это критично? Скиньте XML посмотреть, желательно самый большой. Добавлено через 2 минуты 17 секунд происходит выполнение двух SqlBulkCopy?
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
31.08.2016, 11:17 [ТС] | 14 |
да, инсертами выполнялся около получаса если не крашился
Добавлено через 3 минуты Да, это критично, потому что эти файлы всего лишь маааалюсенькая часть того что надо будет обработать
0
|
186 / 184 / 97
Регистрация: 30.04.2016
Сообщений: 478
|
|
31.08.2016, 12:18 | 15 |
Сообщение было отмечено ILKarina как решение
Решение
ILKarina, в процессе парсинга у Вас выполняется множество запросов в БД. Избавьтесь от этого. Сперва загрузите все необходимые данные в память из базы, потом их используйте при парсинге. Ускорение должно быть не на один порядок.
1
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
31.08.2016, 14:00 [ТС] | 16 |
golubyatnikovtv, Спасибо понял свою ошибку
0
|
19 / 18 / 14
Регистрация: 06.03.2013
Сообщений: 335
|
|
22.09.2016, 06:00 [ТС] | 17 |
golubyatnikovtv, добрый день! Можете помочь с еще одной проблемой
У меня возник небольшой казус: Переполнение памяти при использовании DataTable. Примерно около 1к файлов в которых по несколько тысяч строк.
0
|
22.09.2016, 06:00 | |
22.09.2016, 06:00 | |
Помогаю со студенческими работами здесь
17
Быстрое чтение большого файла. Зависает процесс Максимально быстрое чтение очень большого файла Быстрое создание большого массива элементов управления Падает сайт изза большого количество подключений к базе данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |