![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.09.2010
Сообщений: 3
|
![]()
Здравствуйте, уважаемые форумчане.
Имею прибор, который с дикой скоростью (350 кГц частота дискретизации) передает измерения в компьютер. Пока время измерения было 1 мин. - делал динамический массив, информацию запоминал, а потом спокойно обрабатывал. Теперь попросили увеличить время до 5-ти минут. А комп то слабенький (Селерон 1,6 при памяти 256 МГб), виснет гад. Поделитесь, пожалуйста, опытом по таким вопросам: 1. Поможет ли сливание всего в файл? 2. Если да, то какой способ выбрать? Рассматриваю варианты: 1)просто запись блоками, 2)отображение в память; 3)объектная работа с файлами. В какой из способов рекомендуете внедряться, как в самый быстрый? Заранее вам благодарен. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
http://www.delphibasics.ru/AssignFile.php или http://www.delphibasics.ru/Assign.php
http://www.delphibasics.ru/Assigned.php http://www.delphibasics.ru/ReWrite.php http://www.delphibasics.ru/Write.php http://www.delphibasics.ru/CloseFile.php или http://www.delphibasics.ru/Close.php не использовать потоков(Tstream)... Собственно TStream и основан на выше описанных методах. Как вариант создать свой буффер памяти размером ну 50 мб минимум. Данные с аппаратуры загоняются туда одним потоком, а второй поток успешно читает буфер и пишет в файл. Таким образом получается некий конвеер. Те. запись не на прямую(получил > записал) а (Получил > оставил в буфере > читаешь дальше[второй поток в этот момент загребает из буфера]). Получается что-то ввиде конвеера. И думаю, что таким образом система не будет очень сильно нагружаться. т.к. данные с аппаратуры > местечко в оперативе > отображение данных из оперативы в место на жостком диске. Думаю варятли возможно отображать данные прямо на hdd без исп. оперативной памяти. Последний раз редактировалось Человек_Борща; 15.10.2011 в 03:03. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]() Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 01.09.2010
Сообщений: 3
|
![]()
Спасибо за ответы.
На счет Асма - че-то я очкую что не разберусь) А вот насчет буферирования - похоже что надо попробовать. Вот как я себе представляю: 1 делаю два буфера; 2 поток "приемник" по очереди их заполняет. В конце скидывает событие; 3 поток "сливатель" по событию записывает единым блоком каждый буфер в файл. Нужно ли с приоритетами тут мутить, или и так заработает? |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
нет не так. Если 2 буфера. какой смысл?
Инфа из одного в другой, сама не переместиться. один читает от начала второй пишет в конец. допустим если буфер размером в 50 мб, то оба потока хапают только по 25 мб. модно ещё сообщения между потоками запилить, чтобы первый не пытался читать пустой буфер ,а второй писать в переполненый. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Цитата:
inputbuf:=buff1; outbuff:=buff2; заполняем buff1 сбрасываем buff2 потом делаем inputbuf:=buff2; outbuff:=buff1; и теперь заполняем buff2 а сбрасываем buff2 а программы ни о чем и не догадываются как работали с inputbuf outputbuff так и работают. ну конечно же надо следить за местом в этих буферах. собственно работает в основном прием данных. как только буфер заполнен переключаем буфера, инициируем сброс и продолжаем работу(прием).
программа — запись алгоритма на языке понятном транслятору
|
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 01.09.2010
Сообщений: 3
|
![]()
Здается мне, что 1-н буфер, деленный на 2, это то же самое, что 2- буфера.
Но в целом дело ясное, буду пробовать ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Самый быстрый режим работы процессора | Tronix | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 32 | 29.07.2011 21:01 |
Самый простой способ работы с файлами | wwe2012 | Общие вопросы C/C++ | 4 | 28.03.2011 22:12 |
Самый быстрый браузер | Marsel737 | Софт | 31 | 30.08.2010 01:09 |
Самый быстрый способ получить изображение в заданном прямоугольнике? | TwiX | Мультимедиа в Delphi | 4 | 04.04.2010 10:08 |
Самый быстрый способ проверить прокси? | TwiX | Работа с сетью в Delphi | 6 | 15.02.2010 22:41 |