Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
1

Обработка очень больших файлов

20.09.2017, 22:19. Показов 1877. Ответов 11
Метки нет (Все метки)

У меня есть большие текстовые документы, состоящие из 10 и 100 тыс символов каждый. Эти документы нужно обработать и сохранить в соответствии с определенным условием. Например каждый символ 'd' заменить на 'д' и т.д. В программе я получаю массив из символов, после чего произвожу над ним какие то операции, примерно так :

C#
1
2
3
4
  for (int i = 0; i < Mass.Length; i++)
               {
                  //Do some thing
               }
Процесс даже для небольших файлов и документов растягивается на очень долгий срок и работать таким образом с документами просто невозможно. Что можно сделать ? Если бы размер файла (число символов) всегда было одинаковым то я мог бы создать несколько массивов в каждый из которых помещал бы только часть от символов в оригинале и каждый массив обрабатывался бы в отдельном потоке. Но тк размер файлов не фиксированный то как и сколько потоков создавать непонятно. Может кто знает решение ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.09.2017, 22:19
Ответы с готовыми решениями:

Открытие очень больших AVI файлов
Суть в том, что имеется .avi файл размером больше 1GB(открытие .avi делаю библиотекой AForge).В...

Считывание данных из очень больших файлов
Собственно вопрос: чем(как?) построчно считать текстовый файл(ну точнее csv файл) который весит...

Считывание больших файлов и их обработка
Помогите с задачей 1) Имеются несколько txt файлов (больших размеров), в которых содержатся...

Как найти остаток от деления очень больших чисел
Есть очень большое целое число x (1 ≤ x &lt; 10^100000) нужно найти остаток от деления этого числа на...

11
Администратор
Эксперт .NET
13980 / 11340 / 4593
Регистрация: 17.03.2014
Сообщений: 22,926
Записей в блоге: 1
20.09.2017, 22:29 2
EvgenNews, самый простой выход - построчное или блочное чтение и запись. Если преобразование не меняет длину строк, то можно читать и записывать в один файл. Если нет, то понадобится промежуточный временный файл. Потоки здесь использовать не надо - во всяком случае сейчас.
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
20.09.2017, 22:34  [ТС] 3
Вы предлагаете разбить весь массив на блоки и работать с каждым паралельно ?
0
Администратор
Эксперт .NET
13980 / 11340 / 4593
Регистрация: 17.03.2014
Сообщений: 22,926
Записей в блоге: 1
20.09.2017, 22:50 4
EvgenNews, я только предлагал работать построчно или поблочно. Про параллельность я ничего не говорил.
0
.NET C#,ASP.NET MVC
Эксперт .NET
590 / 501 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
20.09.2017, 22:50 5
Цитата Сообщение от EvgenNews Посмотреть сообщение
паралельно
Только если обработка. Запись все равно будет последовательная
0
5 / 5 / 1
Регистрация: 08.03.2017
Сообщений: 229
20.09.2017, 23:28  [ТС] 6
Добавлено через 15 секунд
Цитата Сообщение от OwenGlendower Посмотреть сообщение
EvgenNews, я только предлагал работать построчно или поблочно. Про параллельность я ничего не говорил.
а как это ускорит обработку данных?
0
Администратор
Эксперт .NET
13980 / 11340 / 4593
Регистрация: 17.03.2014
Сообщений: 22,926
Записей в блоге: 1
20.09.2017, 23:33 7
Цитата Сообщение от EvgenNews Посмотреть сообщение
а как это ускорит обработку данных?
Путем резкого уменьшения количества выделения памяти в куче и, как следствие, меньшее количество запусков сборщика мусора и меньшее кол-во взаимодействий с ОС насчет памяти.
0
Эксперт .NET
5554 / 3606 / 1492
Регистрация: 09.05.2015
Сообщений: 8,662
21.09.2017, 00:03 8
Цитата Сообщение от EvgenNews Посмотреть сообщение
У меня есть большие текстовые документы, состоящие из 10 и 100 тыс символов каждый
Это разве большие? Помоему это 100КБ-1МБ, очень маленькие...

Обработка таких файлов должна проходить очень быстро. Покажите код который вы используете.
0
598 / 482 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
21.09.2017, 05:37 9
Цитата Сообщение от Someone007 Посмотреть сообщение
100КБ-1МБ
Такой фаил считается меньше чем за секунду... Даже, если там 100 мб
0
Эксперт .NET
9435 / 6804 / 1093
Регистрация: 21.01.2016
Сообщений: 25,826
21.09.2017, 07:05 10
EvgenNews, выделить группу буферов фиксированного размера и читать в них данные поблочно. Так же, поблочно, их писать назад в файл. Нагрузка на сборщик мусора - нулевая. Можно попробовать, так же, обрабатывать два-три файла параллельно. Посмотреть как это скажется на производительности.
0
управление сложностью
1685 / 1297 / 260
Регистрация: 22.03.2015
Сообщений: 7,548
Записей в блоге: 5
21.09.2017, 09:31 11
А почему, например, нельзя считывать в поток, на лету менять данные, и писать уже в другой файл?
0
Эксперт .NET
9435 / 6804 / 1093
Регистрация: 21.01.2016
Сообщений: 25,826
21.09.2017, 09:44 12
Да, можно и так, если алгоритм обработки не требует "бегать туда сюда" по буферу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2017, 09:44

Обработка больших объемов данных из Excel
Здравствуйте, уважаемые форумчане! Есть огромных размеров excel файл, пусть для простоты, в нем...

Чтение и обработка больших файлов
Нужно прочитать большой файл (несколько гигабайт), поделить содержимое файла на int'ы и посчитать...

Обработка больших XML-файлов
Здравствуйте, помогите пожалуйста, создать файл формата xml на питоне, сохранить туда некоторые...

Обработка текстовых файлов (логов) больших размеров
Добрый день. Хочу написать &quot;обработчик&quot; текстовых логов. Логи очень большие (к примеру бывают...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru