
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.09.2017, 18:05
|
|||
|---|---|---|---|
|
|||
MSXML Создание больших файлов |
|||
|
#18+
Создается файл подобного формата Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Процедура добавления новой строки таблицы Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Проблема: время работы этой процедуры сильно зависит от того сколько уже узлов вставлено в FParentNode. При 15000 строк время работы составляет 15 мс на один запуск (начинается с 0). Т.к. идет параллельная вставка в три таблицы, то суммарное время работы оказывается весьма значительным. Первые 30% всей работы выполняются где-то минут за 30, а остальные 70% - часа за 4. Собственно вопрос - чего бы такого подкрутить? Цикл вставки полей Код: pascal 1. 2. всегда выполняется за константное время (~0), а время выполнения appendChild и validateNode растет линейно, в зависимости от количества записей. Если код слегка модифицировать Код: pascal 1. 2. 3. 4. 5. то получаем почти незаметный рост времени валидации (от 0 то 2 мс на 17000 записей). Чуть больший на appendChild (от 0 до 5) и дикий рост на добавления полей (до 15 мс на 17000 записей). В итоге такой код работает на 5-7 мс дольше, чем исходный. Пробовал играться с фрагментами (IXMLDOMDocumentFragment) и вставлять в 1 фрагмент по 1000 записей, но тогда отваливалась валидация. Если же запись вставлять вначале в ноду, там валидировать, а потом переносить в фрагмент, то получалась существенная просадка по скорости. В общем, приветствуются любые идеи (вплоть до смены парсера). Но новый парсер должен будет уметь валидировать по XSD схеме. В том числе, поддерживать валидацию одного узла В приложении время выполнения базового варианта С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 18:10
|
|||
|---|---|---|---|
|
|||
MSXML Создание больших файлов |
|||
|
#18+
А вот как выглядит модифицированный вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.09.2017, 19:29
|
|||
|---|---|---|---|
|
|||
MSXML Создание больших файлов |
|||
|
#18+
Использование фрагментов по 1000 узлов. Валидация отключена, фрагменты вставляются в документ сразу после создания. На графике append строки в фрагмент. Кто мне объяснит природу этих ступеней? Как раз на 1000 записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2017, 06:05
|
|||
|---|---|---|---|
|
|||
MSXML Создание больших файлов |
|||
|
#18+
Я бы попробовал для каждой из таблиц формировать свой XML-документ, после окончания заполнения всех таблиц объединить их в один документ. При этом, если вставка идет параллельно в три таблицы одновременно - попробовал бы разнести эту операцию по трем различным потокам с ожиданием завершения всех трех в главном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2017, 14:49
|
|||
|---|---|---|---|
|
|||
MSXML Создание больших файлов |
|||
|
#18+
Сон Веры Павловныпосле окончания заполнения всех таблиц объединить их в один документБыла такая мысль. Но не займет ли процесс объединения ровно то же время, что и изначальная вставка? Сон Веры Павловныпопробовал бы разнести эту операцию по трем различным потокамТам не то, чтобы параллельно. Там мастер-детайл-детайл. Хотя да - попробовать можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=14&mobile=1&tid=1332012]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 154ms |

| 0 / 0 |

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.