Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
#1

Быстрее чем цикл - C++

18.11.2012, 14:37. Просмотров 450. Ответов 11
Метки нет (Все метки)

Доброго времени уток дорогие форумчане.

Интересует вот какая штуковина, допусти есть программа которая открывает два файла, смотрит на них, и исходя из каких то своих умозаключений создает 3ий файл. Я подобную задачу решал так - открывал два файла на чтение и один на открытие, потом чикл считовал по одному байту в int от одного файла и в int от другого (те запись не в массив а всего в одну переменную), потом в нем что-то с этими двумя перременными происходило и это значение писалось в 3ию перременную, а та уже записовалась в 3ий файл.

Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.

Как осуществить эту задачу действительно быстро?

Зарание огороменное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 14:37     Быстрее чем цикл
Посмотрите здесь:

C# работает быстрее чем С++ - C++
имеется файл типа 6 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0...

Sin быстрее чем из math.h - C++
ребят, вообщем мне задали написать программу которая считала синус быстрее чем из math.h ) скорость должна достигаться путем потери...

Правда что С быстрее чем С++? - C++
Имеется в виду на исполнении, а не на момент компиляции... Наверняка такая тема уже была, но я не нашёл, если дадите ссылку также буду...

C программа компилируется быстрее чем C++ - C++
Почему программа на C компилируется быстрее чем на С++?

Быстрее ли вывов функции, переданной через параметр шаблона, чем через простой указатель на функцию? - C++
Здравствуйте! Есть два варианта передачи некоторой переменной типа "указатель на функцию" в класс - через параметр шаблона и просто с...

Быстрее ли localMember чем this->localMember? - C++
Здравствуйте! Интересует вопрос. Являются ли конструкции data и this->data эквивалентными с точки зрения генерируемого кода и...

Почему цикл while выполняет здесь больше итераций чем нужно? - C++
Не понимаю от чего здесь цикл выполняется 21 раз вместо 10. Притом если вместо i < 10 написать i <= 10 цикл выполняется 23 раза... ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.11.2012, 14:41     Быстрее чем цикл #2
попробуй писать весь буфер через ReadFile/WriteFile, но я не знаю, отличаются ли они по скорости
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 14:59  [ТС]     Быстрее чем цикл #3
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:21     Быстрее чем цикл #4
Цитата Сообщение от cactus09 Посмотреть сообщение
Kuzia domovenok, За ответ спасибо только дело даже не в самом методе считывания (я использую у TFileStream просто Read/Write) тут помоему надо двигатся в направлении увеличении скорости работы цикла, но как это сделать не знаю, потому и спрашиваю. Задействие более 1ого ядра у cpu кажется слишком маштабным для такой крохотной цели, да и тем более с boost я не дружу.
У Вас там какие-то супер действия происходят с переменными?
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:27  [ТС]     Быстрее чем цикл #5
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
18.11.2012, 16:36     Быстрее чем цикл #6
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Очень странно. Если читать такие небольшие файлы целиком, не может быть так медленно.
Я правильно понял: просто читаются два файла, xor'ятся, результат пишется в третий?
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
18.11.2012, 16:38  [ТС]     Быстрее чем цикл #7
Somebody, Правильно поняли
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:39     Быстрее чем цикл #8
Цитата Сообщение от cactus09 Посмотреть сообщение
Croessmah, Да в том и дело что нет, всего лищ XOR одного bin'арника на другой, но блин возьми, к примеру тот же сохранение 3d модели в каком нибудь 3d max'е - размер файла и мат. вычисления в разы больше, а по времени меньше.
Может Вы сами что-то не так делаете?
Потому что что-то слишком медленно.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 16:44     Быстрее чем цикл #9
Цитата Сообщение от cactus09 Посмотреть сообщение
Это быстрее чем открывать один файл, записовать его в массив, потом открывать второй файл записовать его в другой массив и потом уже исходя из этих двух массивов формировать 3ий файл, но все равно не достаточно быстро те файл объемом в 4Мб пишется порядка 3 минут.
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками. Но вот если весь файл в массив не влезет, то не потеряешь ли на вспомогательных операциях? А такой вариант надо предусмотреть.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
18.11.2012, 16:45     Быстрее чем цикл #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Быстрее всего читать большими блоками, а обработку в любом случае циклить. Писать тоже быстрее всего большими блоками.
Поддерживаю! По одному байту читать и писать - это зверство.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
18.11.2012, 17:19     Быстрее чем цикл #11
Читать по одному байту - смотря чем. ReadFile'ом - конечно, не айс, а сишные/плюсовые/билдеровские средства должны сами буферизацией заниматься.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <fstream>
 
int main()
{
    using namespace std;
    ifstream src0("src0", ios::in | ios::binary);
    ifstream src1("src1", ios::in | ios::binary);
    ofstream dst("dst", ios::out | ios::binary);
    char c0, c1;
    while (src0.get(c0) && src1.get(c1))
        dst.put(c0 ^ c1);
}
20 МБ - выполняется моментально.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 17:23     Быстрее чем цикл
Еще ссылки по теме:

Как быстрее? - C++
Как быстрее создавать двумерный массив размером NxM: вызвать один раз new с аргументом NxM или же создавать массив указателей размером N, а...

Что выполняется быстрее? - C++
Что выполняется быстрее (в первом случае идет вычисление адреса элемента массива, а во втором вычисляется сам элемент, причем известно что...

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Какой swap быстрее? - C++
добрый день. возможно, вопрос глупый (или обсуждался уже, не искал, но все же), что будет быстрее, вот такое: void swap2(int* a, int* b)...

Что работает быстрее? - C++
Подскажите пожалуйста, какая из данных реализаций будет работать бытрее? int a = 5; int b = 3; int c = 4; int d,e,f; ...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.11.2012, 17:23     Быстрее чем цикл #12
Цитата Сообщение от Somebody Посмотреть сообщение
Читать по одному байту - смотря чем. ReadFile'ом - конечно, не айс, а сишные/плюсовые/билдеровские средства должны сами буферизацией заниматься.
Какой буферизацией? О чём речь? Загрузку исполняет сам винт через DMA, а эта железяка тупая. И при повторном обращении будет опять грузить.
Yandex
Объявления
18.11.2012, 17:23     Быстрее чем цикл
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru