Форум программистов CodeGuru
24 Сентябрь 2018, 15:13:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как ускорить запись в файл в Windows?  (Прочитано 10101 раз)
0 Пользователей и 1 Гость смотрят эту тему.
igoryuha
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« : 17 Май 2010, 00:02:51 »

Есть задача: принимать данные от аппаратуры программой1 и через файл передавать их в программу2. Действие происходит в Windows XP.
При этом не устраивает скорость записи данных в файл. Передача осуществляется средствами WinAPI.
Есть ли более быстрые способы передачи данных?
Желательно минимальное изменение изменение кодов программ по причине того, что программу 1 и 2 делают разные люди.
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #1 : 17 Май 2010, 08:56:07 »

Проецирование файла в память
CMemFile
Записан
igoryuha
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« Ответ #2 : 17 Май 2010, 22:03:02 »

Судя по названию класса он относится к MFC. Я прав? У меня все программа в C++Builder написана...
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #3 : 18 Май 2010, 18:44:46 »

тогда CreateFileMapping
        MapViewOfFile
 в одной программе открываешь на запись
 в другой на чтение
скорость нормальная у меня аудиоАнализатор выдает в другю прграмму спектр
рекомендую Дж. Рихтер К.Назар "Windows via C/C++ програмирование на Visual C"
несмотря на название все примеры в API.
очень подробно расписана память,потоки,работа с файлами,ядро и т.д
С уважением Валерий
Записан
igoryuha
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« Ответ #4 : 22 Май 2010, 08:35:57 »

Как раз недавно, не читая Ваше сообщение, нашел эту книгу.Меня тоже заинтересовала.Но почитать пока не успел, к сожалению.
Попробовал сделать при помощи файлов, загружаемых в оперативную память.Вопрос: какого размера файл лучше всего загружать. Долго тестировал этот параметр. Смотрел время,затрачиваемое на запись в файл (при помощи QueryPerformanceCounter). У меня получилась линейная зависимость (чем меньше файл, тем быстрее он записывается).Это правильный вывод?Просто я слышал рекомендации на тему того, что файл должен быть выровнен по границе страницы памяти...
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #5 : 29 Май 2010, 21:52:17 »

Вообще, имхо, сначала стоит определиться, какая скорость записи нужна.
Возможно, просто устройство хранения не может обеспечить требуемой скорости.
Если же это в пределах 10мб/сек, и в качестве устройства используется современный винчестер, то следует посмотреть в код - что он делает при записи в файл.
Возможно, причина в самом приложении.
Банальный пример. В файл пишется последовательность чисел от 0 до 9. И выводятся числа примерно так: fprintf(f, "%d", nNumber);. Т.е. для записи 1-го символа производится 1 вызов fprintf. 10мб - 10 миллионов вызовов fprintf. И возможно, тут узким местом будет ресурс процессора.

В любом случае, windows запись в файлы кеширует (если только файл не открыт с ключом FILE_FLAG_NO_BUFFERING), поэтому надо сразу убедиться, что приложение достаточно оптимально пишет в файл.

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

А в общем случае под windows особо скорость записи в файл не разогнать - оно и так достаточно оптимально там сделано.
Записан

Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #6 : 30 Май 2010, 16:01:03 »

Здесь речь не идет о винчестере.
Система создает в памяти буфер, который с точки зрения программы выглядит как файл.
С уважением Валерий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!