Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Скорость работы winApi в MFC и CLR проектах

5.1K
30 марта 2009 года
Karrde
88 / / 15.10.2007
Такой вопрос: открываю файл с помощью CreateFile в MFC и CLR проектах. Чтение файла в mfc получается раз в 10 быстрее(а скорость критична). Это нормально? или я где то туплю?
40K
30 марта 2009 года
Freya
11 / / 04.11.2008
Нормально! .Net сильно тормозит, из-за множества ограничений... Если не ошибаюсь, то mfc никак не связан с .Net, отсюда и скорость.
341
31 марта 2009 года
Der Meister
874 / / 21.12.2007
Нет, это ненормально.
На всякий случай, спрофилировал. Неуправляемый код работает чуть быстрее, чем C++/CLI, но это отношение не превышает отметки 1,2.
Добавил к марафону проект C#. C++/CLI CreateFile() и C# File.OpenRead() сравнимы, почти один к одному. Файлы 64 kB, 34MB и 699MB.
5
31 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Der Meister
C++/CLI CreateFile() и C# File.OpenRead() сравнимы, почти один к одному.

Дык одно другое использует.

Неплохо было бы увидеть код автора. Напортачить с чтением можно везде.

5.1K
01 апреля 2009 года
Karrde
88 / / 15.10.2007
Я считываю по два байта с wav-файла и записываю переменную типа short
Код:
short inputValue;
ifstream file_stream;
 //Открытие файла
    file_stream.open(FileName, ios_base::binary);
     if(!file_stream.is_open()) {
                return;
     }
     while (!file_stream.eof())
     {
       file_stream.read((char *)&bb, 2);
       inputValue = bb.inputValue;
       i++;
     }
5
01 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Karrde
Я считываю по два байта с wav-файла

Буферизировать, понятное дело, не пробовали. Почти уверен - если положить FileStream под BufferedStream различия в скорости работы программ сойдет на нет.

5.1K
03 апреля 2009 года
Karrde
88 / / 15.10.2007
Хм. а как ifstream совместить с bufferedStream? или это вообще по другому надо читать?
5
03 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Karrde
Хм. а как ifstream совместить с bufferedStream? или это вообще по другому надо читать?


Это как бы вещи из разных миров - ifstream из стандартной C++ библиотеки, тогда как BufferedStream - из стандартной библиотеки CLR.

Я к тому, что читать по два байта из потока - слишком медленно, тем более когда структура данных известна и столь примитивна. Гораздо удобнее считать все в отдельный массив и обрабатывать уже его.

5.1K
03 апреля 2009 года
Karrde
88 / / 15.10.2007
Ну просто, насколько я понял метод read класса BufferedStream читает в массив по одному байту на элемент. а как его заставить читать по два байта на элемент?
5
03 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Karrde
Ну просто, насколько я понял метод read класса BufferedStream читает в массив по одному байту на элемент. а как его заставить читать по два байта на элемент?


Считать в byte[] целый кусок данных, затем можно воспользоваться небезопасным кодом и представить byte[] как набор двухбайтовых чисел.

341
04 апреля 2009 года
Der Meister
874 / / 21.12.2007
А BinaryReader не сможет помочь обойтись без ансейф?
5
04 апреля 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Der Meister
А BinaryReader не сможет помочь обойтись без ансейф?

Действительно. Странно что в голову не пришло.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог