|
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:05 |
|
MSXML Создание больших файлов
|
|||
---|---|---|---|
#18+
А вот как выглядит модифицированный вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 18:10 |
|
MSXML Создание больших файлов
|
|||
---|---|---|---|
#18+
Использование фрагментов по 1000 узлов. Валидация отключена, фрагменты вставляются в документ сразу после создания. На графике append строки в фрагмент. Кто мне объяснит природу этих ступеней? Как раз на 1000 записей ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 19:29 |
|
MSXML Создание больших файлов
|
|||
---|---|---|---|
#18+
Я бы попробовал для каждой из таблиц формировать свой XML-документ, после окончания заполнения всех таблиц объединить их в один документ. При этом, если вставка идет параллельно в три таблицы одновременно - попробовал бы разнести эту операцию по трем различным потокам с ожиданием завершения всех трех в главном потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2017, 06:05 |
|
MSXML Создание больших файлов
|
|||
---|---|---|---|
#18+
Сон Веры Павловныпосле окончания заполнения всех таблиц объединить их в один документБыла такая мысль. Но не займет ли процесс объединения ровно то же время, что и изначальная вставка? Сон Веры Павловныпопробовал бы разнести эту операцию по трем различным потокамТам не то, чтобы параллельно. Там мастер-детайл-детайл. Хотя да - попробовать можно ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2017, 14:49 |
|
|
start [/forum/topic.php?fid=14&msg=39516707&tid=1332012]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 168ms |
0 / 0 |