Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2012, 08:46   #1
Mirovingin
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию Экпорт огромного количества данных в xml

Доброго времени суток.

Казалось простая задача занимает намного больше времени чем положено. . Суть: получая из БД данные необходимо запихнуть их в xml определенного формата. Действия вроде простейшие: открываем датасеты и пока не конец начинаем писать в файл. XML не маленький, хотя в прочем небольшой. Проблема в том что записей по 150-180 тысяч. выводить с помощью WriteLn как то долговато (с учетом того что выгружаются данные по 10 "категориям" т.е. в суме ~2 млн записей). Примерно посчита так: 15 кб на "заголовочную часть" и по 8 кб на каждую запись. Собственно вопрос вот в чем: Как мне кажется самым медленным процессом является постоянный сброс данных с помощью WriteLn. Как его ускорить?
Mirovingin вне форума Ответить с цитированием
Старый 12.01.2012, 08:50   #2
Mirovingin
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Вариант ли создать tstringlist и сбрасывать его через время в файл, вроде как нагрузка на оперативку, но каковы разумные пределы? +Не будет ли "размножаться" память из-за открытого файла? Или его Открывать-закрывать-Открывать-зак... Тоже не хорошо, тогда точно все полетит... Поделитесь опытом....
Mirovingin вне форума Ответить с цитированием
Старый 12.01.2012, 09:59   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Собственно, что вам точно надо? Я кроме потока мыслей, тчной задачи не увидел..
Человек_Борща вне форума Ответить с цитированием
Старый 12.01.2012, 10:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вариант ли создать tstringlist и сбрасывать его через время в файл,
скорее всего - Вам хватит обыкновенного TStringList
только не надо "сбрасывать его через время".
Создали TS := TStringList.Create;
в цикле добавили нужные строчки: TS.Append('Нужная строка')
Сохранили в текстовый файл TS.SaveToFile('C:\temp\MyVeryBig.xm l');
очистили FreeAndNil(TS);
всё.

p.s. ну ещё можно посмотреть на работу через файловые потоки: TFileStream...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.01.2012, 10:36   #5
Mirovingin
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

В общем-то и пытаюсь через TFileString. TstringList уже попрбовал. OutOfMemory печально. Вопрос в методике сохранения большого файла. И его формирования программой.
Mirovingin вне форума Ответить с цитированием
Старый 12.01.2012, 12:48   #6
Mirovingin
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Ешк, FileStream... Сравниваю производительность... Если он будет хотяб в 1,5 раза быстрее думаю вопрос закрыт...
Mirovingin вне форума Ответить с цитированием
Старый 12.01.2012, 13:43   #7
Mirovingin
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Не, не айс... что так что так 10 мин 1000 записей сохраняет... Так что я в корне ошибся... Вопрос в Запросах и подчиненных датасетах. Спасибо.
Mirovingin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считываение данных с XML Greekus Общие вопросы Delphi 3 03.10.2011 11:05
Считывание данных из xml nakazanie Общие вопросы Delphi 0 04.03.2011 08:03
конвертнуть jpg огромного размера ghest Мультимедиа в Delphi 2 25.12.2010 13:53
подчет количества данных garlp Помощь студентам 0 18.04.2009 11:58
Набираю команду для создания огромного проекта. polukrovka Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 29.08.2007 18:29