|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
||||||
Создание огромного txt файла на Delphi 720.11.2024, 18:13. Показов 2289. Ответов 35
Метки нет (Все метки)
Здравствуйте уважаемые форумчане, обращаюсь к вам с советом. Я пишу на Delphi 7 и решаю одну интересную задачку, но что то не выходит у меня, может подскажите реализацию. Дело в том что мне нужно сгенерировать текстовый файл с большим объёмом данных, то есть программа должна уметь работать с большими объёмами данных в гигабайтах (50-100гбайтный файл генерировать например).
К сожалению проблема заключается именно в скорости генерации такого файла. Я в такого рода оптимизация не спец и единственное поверхностное моё решение (которое работает но медленно для таких объёмов выглядит так):
если есть примеры реализации был бы безмерно благодарен. Даже если это что то сложно для понимания и написано каком либо сложно читаемом низком уровне допустим, любому решению или идее был бы рад, заранее благодарю. P.S. Я вот думаю, если с delphi не получится проделать подобный фокус, быть может стоит попробовать перенести реализацию на допустим bat файл или ещё как то. Может как то можно в потоки подсунуть подобную генерацию, пожалуйста подскажите в каком направлении хотябы пойти?
0
|
||||||
| 20.11.2024, 18:13 | |
|
Ответы с готовыми решениями:
35
Создание файла (txt) теста через Delphi Быстрый парсинг огромного txt файла (800 мб)
|
|
Злостный нарушитель
10893 / 5829 / 1288
Регистрация: 12.03.2015
Сообщений: 26,896
|
|
| 21.11.2024, 10:36 | |
|
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|||
| 21.11.2024, 10:50 | |||
|
Добавлено через 9 минут
0
|
|||
|
Злостный нарушитель
10893 / 5829 / 1288
Регистрация: 12.03.2015
Сообщений: 26,896
|
|
| 21.11.2024, 10:52 | |
|
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|
| 21.11.2024, 10:53 | |
|
Ну и конечно, при наличии ProcessMessages в таком месте нужно предусмотреть защиту от повторного выполнения этой процедуры, либо, постоянно иметь в виду, что нельзя нажимать кнопку "Старт" до окончания работы либо до остановки вручную.
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
||
| 21.11.2024, 10:57 [ТС] | ||
|
0
|
||
|
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
|
|
| 21.11.2024, 12:35 | |
|
ну прям как у дяди Высоцкого
Ой, Вань, гляди-кась, попугайчики, Нет, я ей-богу закричу, А это кто в короткой маечке, Я, Вань, такую же хочу. В конце квартала правда, Вань, Ты мне такую же сваргань, Ну что "отстань", опять "отстань", Обидно, Вань. Уж ты бы лучше помолчала бы, Накрылась премия в квартал, Кто мне писал на службу жалобы, Не ты, да я же их читал. К тому же эту майку, Зин, Тебе напяль - позор один, Тебе шитья пойдёт аршин, Где деньги, Зин. Ещё раз, программа сама ничего не пишет - она даёт команду системе записать из памяти по принципу - оттуда и столько-то. Оно попадает в стек, а дальше когда у системы дойдут руки. Всё! Больше ничего! Единственное, что Вы можете сделать это свести время физической записи на винт и время открывает > ищет место в MFT > пишет > изменяет MFT > зарывает к уравнению А = В. Причём многое зависит от винта кеш-контроллера, RMPS, количества головок\блинов, UDMA и самое главное, с чем система решила обратиться к диску - в общем, стек записи\чтения.
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|||
| 21.11.2024, 19:07 | |||
|
Добавлено через 5 минут
0
|
|||
|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
|
| 21.11.2024, 19:51 [ТС] | |
|
Это всё конечно очень здорово, но по факту, я сейчас топчусь на месте и не знаю что и как в итоге сделать. У меня нет чёткого понимания что как правильнее быстро записать, чтобы добиться нужного результата. Я так понял тема начинает превращаться в оффтоп, стоит наверное заканчивать - всех благодарю за оказанную помощь!=)
Так или иначе это дало какое то видение и опыт. Большего наверное ожидать не следовало)
0
|
|
|
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
|
||||||
| 21.11.2024, 21:44 | ||||||
|
MrHayno, да куда уж проще?
берёшь StopWatch для измерения времени. берёшь buffer. в цикле пишешь через FileWrite например 1000 раз. смотришь, сколько заняло времени. увеличиваешь buffer на, например, 10 байт. повторяешь запись. смотришь, сколько заняло времени. и так повторять, пока время не перестанет уменьшатся. как только перестало - ВСЁ, ТЫ ДОСТИГ МАХ ПРОПУСКНОЙ СПОСОБНОСТИ СИСТЕМЫ. хочется еще быстрее - ОТРУБАЕШЬ ВСЕ НЕНУЖНЫЕ СЕРВИСЫ, СЛУЖБЫ, ГАДЖЕТЫ И ПРОЧУЮ ЕРУНДУ, удивишься, как это влияет. РЕКОМЕНДУЮ НАЧАТЬ С РАЗМЕРА BUFFER РАВНОГО 1 БАЙТУ. Добавлено через 52 минуты MrHayno, код для теста
AzAtom, Int64 - окстись, D7 из того времени, когда файл-данные на 100Мбайт вызывали фразу - у тебя там что, порнуха закодирована???? да и системы х32.
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
|||||||
| 21.11.2024, 22:07 [ТС] | |||||||
Я боюсь отвалится запись на большом объёме данных, типа 50 гиг. Да и долго будет 3_new_2.rar P.S. кажется StopWatch н на 10ом делфи есть, на 7ом вроде нет, поэтому взял GetTickCount
0
|
|||||||
|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
||||||||||||||||
| 21.11.2024, 22:29 [ТС] | ||||||||||||||||
|
Взял также ограничение длины
Кажется что то нащупал, подтвердите догадки. Использовал вложенный for внутрь while - запихивая больеш строк в буффер, чем ускорил запись в разы:
0
|
||||||||||||||||
|
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
|
||||||
| 21.11.2024, 22:44 | ||||||
|
MrHayno, ну, я не знаю, как ещё проще. на пальцах -
1 Мб = 450 мс 100 Мб = 640 мс намёк уловил??? вот тут вместо
Всё, ещё проще я не могу........... Пока писал, опередили. Всё верно.
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.11.2024
Сообщений: 13
|
||||||||
| 22.11.2024, 00:11 [ТС] | ||||||||
|
Я пытался пересчитать свою строку в байты(сделал так чтобы количество символов в строке было константно) и задавать setlength равный этому количество байт (31* количество циклов наслаивания буффера), в принципе верный подход, но у меня вылезает мусором в выходящем файле какая то часть памяти незаполненная(хотя количество байт должно биться), пытался подогнать и так и так не вышло. Попробовал вобратку, setlength занулил и снизил количество наслаиваний буффера до двух(экспериментальным путём почему то выяснил что занижение количества повторов увеличивает производительность, хотя должно быть наоборот), я пришёл к быстрой работоспособной версии. причём если бы я наслоил три буффера, скорость бы упала. Это на самом деле обескураживает, но работает теперь как надо. Я спокойно генерирую файл на 50гигов, это примерно по 300мб в секунду пишется на NTFS диск.сист. Вот конечный экземпляр решения, может кому то пригодится: Кликните здесь для просмотра всего текста
![]() И сразу спасибо за подсказки, очень помогло!
0
|
||||||||
|
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
|
||||||||||||
| 22.11.2024, 08:20 | ||||||||||||
|
MrHayno,
для начала на вопрос
второй намек надо буфер очищать. где? разберетесь. в третих вместо
И САМОЕ ГЛАВНОЕ ОТКЛЮЧИТЕ Application.ProcessMessages; ОН У ВАС ЖРЕТ 50% ВРЕМЕНИ
0
|
||||||||||||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|
| 22.11.2024, 08:51 | |
|
0
|
|
|
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
|
|||||||||||
| 22.11.2024, 08:59 | |||||||||||
|
и переделайте
и Random(9) это 0-8 а не 0-9 Добавлено через 2 минуты AzAtom, однако неправ. даже интересно стало.
0
|
|||||||||||
| 22.11.2024, 08:59 | |
|
Обработка огромного количества txt-файлов с загрузкой в Excel Создание XML файла из случайно перемешанных строк txt файла
Создание txt файла при добавлении файла в архив rar, немного дополнить скрипт Файл: Переписать текст в t3.txt сначала из файла t1.txt, а потом из файла t2.txt Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|