
    Новые сообщения [новые: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/search_topic.php?author=NLK&author_mode=last_posts&do_search=1]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    14ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    55ms | 
get topic data:  | 
    13ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    45ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 661ms | 
| total: | 835ms | 

    | 0 / 0 | 

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