QuadMan
|
|
1 | |
Работа с большим объемом данных в реальном времени27.11.2013, 18:48. Показов 2718. Ответов 1
Метки нет (Все метки)
Добрый день!
Недавно решил перевести один проект с Delphi на C#. Проект связан с получением и обработкой данных (в реальном времени, на скоростях порядка 15-20 МБ/с). Понятно, что в данном контексте, C# не лучший выбор, но Delphi перестал развиваться, как язык и захотелось идти в ногу со временем.. но я не об этом. Проект грубо говоря, представляет из себя два потока - один поток чтения данных из устройства (по USB), другой поток - обработка данных. В потоке чтения данные записываются в большой кольцевой буфер (порядка 30-40 МБайт), поток обработки, когда есть время забирает данные из кольцевого буфера и декодирует их. Мне казалось, что в C# должна быть нативная поддержка кольцевого буфера, но, его среди стандартных классов я не нашел. Тогда интересно, как реализованы MemoryStream, UnmanagedMemoryStream, Queue - неужели все эти классы будут выделять дополнительную память при выходе указателя записи за пределы допустимой области. Также много вопросов вызывает нежелательность использования указателей - сильно ли пострадает производительность, если оперировать массивами и индексами? Читал про fixed и unsafe - но пока не понял, как это применить к моей задаче. Все-таки в Delphi, C++ указатели свободно передаются, а тут - везде нужно метки ставить дополнительные... жутко неудобно получается. Может быть у кого-то есть опыт работы с большими объемами данных - как лучше организовать работу? Спасибо! |
27.11.2013, 18:48 | |
Ответы с готовыми решениями:
1
Работа с большим объемом данных Работа с большим объемом текста: какой тип данных выбрать работа с большим объемом данных Работа с большим объёмом данных |
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
|
|
27.11.2013, 20:31 | 2 |
15-20 МБ/с по USB?
Буффер 30-40 МБайт неоправданно большой, с ним трудно работать, оптимизируйте операцию декодирования. MemoryStream за кулисами обыкновенный массив byte[], размер ограничен фреймворком. С большими объемами данных работа ведется традиционно: chunk by chunk. Как лучше организовать работу трудно сказать слишком мало вводных данных. В таких неопределенных задачах я добавляю дополнительный класс для анализа производительности и ихменения размера промежуточного буффера.
0
|
27.11.2013, 20:31 | |
27.11.2013, 20:31 | |
Помогаю со студенческими работами здесь
2
Работа с большим объемом данных Работа с большим объемом данных Работа с большим объемом данных QtSerialPort Работа с большим объемом данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |