QuadMan
|
|
1 | |
Работа с большим объемом данных в реальном времени27.11.2013, 18:48. Показов 2748. Ответов 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 Работа с большим объемом данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Использование Go (Golang) в Highload-проектах: преимущества и особенности
bytestream 25.01.2025
В мире высоконагруженных систем выбор правильного инструментария играет ключевую роль в успехе проекта. Go (Golang) представляет собой относительно молодой язык программирования, который быстро. . .
|
Откуда у float лишние цифры в конце дробной части. Представление чисел с плавающей точкой
bytestream 25.01.2025
При разработке программного обеспечения часто возникает необходимость работать с вещественными числами, которые содержат дробную часть. В современных компьютерных системах такие числа представляются. . .
|
Как использовать глобальную переменную в функции в Python
bytestream 25.01.2025
В программировании на Python глобальные переменные представляют собой особый тип переменных, которые доступны для использования во всех частях программы, включая различные функции, классы и модули. . . .
|
Как в цикле обойти все элементы map в Java
bytestream 25.01.2025
В разработке на Java одной из наиболее востребованных структур данных является интерфейс Map, который предоставляет эффективный способ хранения и управления парами "ключ-значение". Разработчики. . .
|
Для чего нужен UserManager.isUserAGoat() в Android и как это использовать
bytestream 25.01.2025
В мире Android-разработки существует множество интересных и порой загадочных функций, о которых знают далеко не все разработчики. Одной из таких функций является метод UserManager. isUserAGoat(),. . .
|
Как обойти масси в JavaScript. Всё о циклах
bytestream 25.01.2025
JavaScript представляет собой мощный язык программирования, широко используемый в веб-разработке, где массивы и циклы являются фундаментальными концепциями для эффективной работы с данными. Массив в. . .
|
Как сделать, чтобы существующая ветка отслеживала удалённую в Git. Связывание локальных и удалённых веток
bytestream 25.01.2025
В разработке программного обеспечения системы контроля версий стали неотъемлемой частью процесса создания качественного программного продукта. Эти инструменты позволяют разработчикам эффективно. . .
|
Как проверить, что файл НЕ существует с помощью Bash
bytestream 25.01.2025
В системном администрировании проверка существования файлов является фундаментальной операцией, особенно при написании скриптов на Bash. Правильная обработка ситуаций, когда файл отсутствует,. . .
|
Как проверить, что строка пустая, неопределена или null в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript разработчики регулярно сталкиваются с необходимостью проверки строковых значений на различные состояния. Валидация данных является критически важным. . .
|
Как проверить существование ключа в объекте или массиве в JavaScript
bytestream 25.01.2025
При разработке веб-приложений на JavaScript программисты постоянно сталкиваются с необходимостью работать с объектами и массивами. Эти структуры данных являются фундаментальными элементами языка и. . .
|
Как создать ArrayList из массива (array) в Java
bytestream 25.01.2025
При разработке программного обеспечения на языке Java программисты часто сталкиваются с необходимостью эффективного управления наборами данных. Массивы и ArrayList являются двумя фундаментальными. . .
|
Как сгенерировать случайные целые числа (int) в указанном диапазоне в Java
bytestream 25.01.2025
В программировании генерация случайных чисел является важнейшим инструментом для решения множества практических задач. От создания игровых механик до реализации алгоритмов машинного обучения, от. . .
|