|
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
|
||||||
Ускорение обработки строк+запись в файл08.06.2013, 20:17. Показов 11142. Ответов 103
Метки нет (Все метки)
Добрый всем день. Подскажие, пожалуйста, можно ли оптимизировать мой код для ускорения выполнения? Суть такова: я открываю большой текстовый файл (до гигабайта), считываю по 1 строке, далее провожу манипуляции со строкой ( делаю из строки вида http://site.ru/folder1/file1.html строку site.ru, тут уже на что хватило ума, заранее извиняюсь)) и сразу же записываю отредактированную строку в другой файл. Вот сам код:
0
|
||||||
| 08.06.2013, 20:17 | |
|
Ответы с готовыми решениями:
103
Моделирование обработки сигналов с датчиков. Ускорение обработки сигнала Запись результата обработки в отдельный файл Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции |
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
|
| 09.06.2013, 03:47 | |
|
откуда разы возьмутся, если время работы Regex 15%, остальное время тратится на декодинг/энкодинг и индексирование строк. Вы просто ниразу не писали таких программ, поэтому понятия не имеете. А толкать умные слова по потокам и массивам любой школьник 3 класса может.
Добавлено через 4 минуты Ща короче высплюсь и завтра набросаю профилирование данного кода и анализом его ускорения я же не патентую ничего
0
|
|
|
Заблокирован
|
|
| 09.06.2013, 03:49 | |
|
Если с VD на другой VD - две линейных операции - столько примерно бонуса и будет, это да. Но из-за малограмотного программиста что будет кто-то такое организовывать итд - да ну нафиг, а руководство этого и не поймёт то...
Добавлено через 23 секунды О б-же, да ни при чём тут твой код(кроме, конечно, однопоточного regex)... Всё упирается в IO...
0
|
|
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
|
| 09.06.2013, 03:50 | |
|
0
|
|
|
Заблокирован
|
|||||||
| 09.06.2013, 03:51 | |||||||
|
Rest in peaces!
0
|
|||||||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
||||||||||||||||||||||||||
| 09.06.2013, 16:37 | ||||||||||||||||||||||||||
|
И так начнём анализ кода автора, как я и обещал. Анализ будет проводиться с помощью процессорного профайлера, запись в файл идти будет без Flush, то есть время скидывания данных в файл учитываться не будет, нам важно вычислить максимальную производительность регекса при разных условиях (скорость чтения файла). Программа работает на RAM-диске, то есть скорости получаются максимально возможные. И так начнём.
Сначала профилируем первоначальный код автора без изменений. Картинка test1.png
Далее исправляем регекс, пишем дополнительные опции, главная из них RegexOptions.Compiled. И зачем нам реплейсы, когда мы можем сразу вытащить название сайта. Получаем в итоге такой регекс.
Далее проверяем моё предположение на счёт складывания строк в массив и парсингом регексом массива размером около 32кб. Картинка test3.png
Поэкспериментируем и например, будем регекс вызывать в отдельном потоке и дожидаться когда он закончит. Профайлер увы не распознал такой код, поэтому смотрим по скорости.
Я не стал переписывать алгоритм извлечения строк (просто некогда ща). Но скажу, что скорость становится в районе 150-180Мб/с при использовании 3 ядер коре i7-2600K. Сишный код понятно работать будет быстрее. Для тех, кому пригодится, выкладываю тестовый проект. Там в папке Release лежит собранный экзешник, для тех у кого нет студии.
2
|
||||||||||||||||||||||||||
|
Заблокирован
|
|
| 09.06.2013, 16:49 | |
|
Вот видишь - сказал же, проверять полезнее и тесты смотреть - про 32к особенно. А пока чтобы с этим удобно работать мне предстоит 12 студию ставить... 8 проект не понимает, видимо время настало.
0
|
|
|
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
|
|
| 09.06.2013, 19:54 [ТС] | |
|
Dexiny, большое спасибо за такой подробный разбор полета)) Очень помогли)
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 10.06.2013, 11:27 | |||
|
0
|
|||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
|
| 10.06.2013, 12:14 | |
|
Managed код теоретически не может работать быстрее из-за своей избыточности
Особенно в делах обработки байтов и строк. Если ты написал программу на Си и она работает медленней, то значит ты школьник, который писать код не умеет ) У сишарпа очень медленные строки, даже вставки Unsafe ускоряют в разы код. Regex да, хорошо получился, за счёт того, что он компилируется перед запуском под конкретный процессор. А вот класc Encoding, который занимается применением кодировки к строкам, работает неимоверно медленно. Сишный же код компилируется при создании программы в "машинный" под конкретную архитектуру. Скомпилил под 32 бита библиотеку, на 64 бита не заработает, скомпилил под х86 .... и тд. А вот шарпы это фреймворк, вы используете runtime-компоненты, которые при запуски определяются, связываются, компилятся. Поэтому вы мало беспокоитесь о том, на какой винде и как будет работать код. Вы можете прямо в одной dll определить разные функции для 32 и 64 бит, выбирать их по условию прямо в коде программы.Да даже недавно соревновались с челом одним, писали архиватор для строк. У него скорости такие получились 900Мб/с сжатие, 1500Мб/с распаковка, с постархивацией скорости упали на 50%, но зато он обошёл все коммерческие архиваторы по степени сжатия (кстати там какой-то рейтинг даже есть алгоритмов на каком-то сайте). Ну а у меня получились скромные 150Мб/с сжатие и 450Мб/с извлечение, и это я использовал Unsafe декодер строк и использовал исходный код 7zip.
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 10.06.2013, 12:39 | |||
C++ - http://ideone.com/23N3nB (время выполнения - 5.69s ) C# - http://ideone.com/7TTk9l (время выполнения - 5.5s ) Перепиши код, чтобы он выполнялся быстрее.
0
|
|||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
|
| 10.06.2013, 17:42 | |
|
Это погрешность вывода консольного приложения ) Меряй время без учёта вывода текста на консоль через такты. И кстати типы-значения у шарпа хорошо работают (ну кроме char), как и у любого другого языка, просто не надо по одному лёгкому примеру сравнивать производительность. Да и ещё сравнивать с stdlib сишника, который собирается под любые платформы. Тести boost лучше с аппаратными оптимизациями.
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 10.06.2013, 20:01 | |||
С++ http://ideone.com/QiS0aC (время: 0.18s) С# http://ideone.com/dUgKRj (время: 0.54s) так, как я знаю из лекций по си, что обращение к массиву из неуправляемого кода происходит быстрее, чем с управляемого, где время тратится еще на то, что-бы проверить, не вышли ли мы за границы массива... НО: в си имеются библиотеки(?), которые работают медленно, как в том же шарпе. И чтобы написать действительно программу, шустрее чем на шарпе - нужно быть как минимум профессионалом, ну или в этом неплохо разбираться, да? Поэтому наверное будет неправильно советовать писать что-то на си, если оно может получиться еще медленнее, в ветке форума - "Форум C# для начинающих", ты как считаешь? Добавлено через 2 минуты да и еще мне тут товариш один скидывал цитату из книги, приведу ее - Кликните здесь для просмотра всего текста
0
|
|||
|
Заблокирован
|
||||||
| 10.06.2013, 21:31 | ||||||
|
Это ещё мелочи, вот сейчас 12 студия докачается...
Добавлено через 1 час 29 минут Докачалась - начал изучать. После
0
|
||||||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||||||||
| 10.06.2013, 21:48 | ||||||||
C++ http://ideone.com/UCmGF2 (Result: -56.4002, time: 0.62) С# http://ideone.com/wGxj66 (Result: -56.4002292586167, time: 0.512) И шарп опять быстрее... ![]() Добавлено через 16 минут Тут ничего сложного -
0
|
||||||||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
||
| 10.06.2013, 22:05 | ||
|
Как нистранно регексу легче пробелы отследить, чем искать буквы http в буквах ) Я использовал стандарт, понятное дело, что я не пользуюсь встроенными методами типа ReadLine, но я не собираюсь понтоваться, пишите код, ускоряющий и правильный, посмотрим. Я лишь показываю какие варианты использования регекса могут быть.
Добавлено через 5 минут
0
|
||
|
Заблокирован
|
||
| 10.06.2013, 22:09 | ||
|
...
0
|
||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
||
| 10.06.2013, 22:13 | ||
|
Добавлено через 1 минуту И кстати я всегда считал (да и проверял) List<T> это ничто иное как список ссылок.
0
|
||
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
|||
| 10.06.2013, 22:17 | |||
0
|
|||
|
177 / 94 / 10
Регистрация: 27.05.2013
Сообщений: 290
|
|
| 10.06.2013, 22:23 | |
|
Я работаю программером Си ) Сишарп это скорее хобби ) Ну иногда я пишу тулзы для работы, типа баз данных и парсеров. Просто я работаю не с х86, то есть там физически нет что-то другого кроме сишника.
0
|
|
|
169 / 132 / 29
Регистрация: 16.02.2013
Сообщений: 867
|
||
| 10.06.2013, 22:33 | ||
Так что вперед
0
|
||
| 10.06.2013, 22:33 | |
|
Запись подготовленных данных во внешний файл и программа обработки созданного внешнего файла. Ускорение обработки файла Ускорение обработки внешних ссылок. Ускорение обработки POST-запроса (Indy) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|