powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непрерывное получение данных
13 сообщений из 13, страница 1 из 1
Непрерывное получение данных
    #38926866
Shtolz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Собстно ситуация:

Из внешнего источника мне приходит набор необработанных данных, которые в конечном итоге должны превратиться в List<T>.

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

В конечном итоге нужно держать List<T> в актуальном состоянии с обработанными мною данными и было бы не плохо получать события при появлении новых записей.

Пробовал запускать обработку полученных данных при возникновении события и происходит какая-то ахинея...
вылетают NullReferenceExceptions и прочая ересь, в листе появляются дубликаты в общем жуть.

Попробовал вместо событий просто в цикле выдавать те же наборы и обрабатывать их - все проходит нормально, значит обработка более менее работает.

так как события возникают достаточно часто (где то каждые 200ms)у меня сложилось впечатление что события плодят кучу потоков на обработку и все потоки одновременно срут работают с одним объектом List<T> и где то тут собака зарыта.

Ну и собстно вопрос: Что гуглить? Где по быстрому инфу найти? Да и на досуге бы почитать по этой теме.
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926872
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtolz,

debugger на всякой ахинеи не пробовали?
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926921
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой дебаггер .

или потокобезопасные коллекции использовать или самостоятельно доступ синхронизировать
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926926
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилкакой дебаггер .

встроенный. Когда будет NullReferenceException, все станет понятно
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926929
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShtolzЧто гуглить? Где по быстрому инфу найти? Да и на досуге бы почитать по этой теме.
Гуглить: c# thread-safe collections

Thread-safe структуры данных .NET 4 (ч. 1)
Thread-safe структуры данных .NET 4 (ч.2)

Как устроен ConcurrentBag в .Net
Concurrency структуры в .net. ConcurrentDictionary изнутри
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926931
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisИзопропилкакой дебаггер .

встроенный. Когда будет NullReferenceException, все станет понятноВ многопоточном-то приложении? Вряд-ли :)
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926954
Shtolz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38926989
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38927023
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAPallarisпропущено...


встроенный. Когда будет NullReferenceException, все станет понятноВ многопоточном-то приложении? Вряд-ли :)

Дык там может и не в коллекции дело, изза чего падает
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38927043
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisИзопропилкакой дебаггер .

встроенный. Когда будет NullReferenceException, все станет понятно

PallarisskyANAпропущено...
В многопоточном-то приложении? Вряд-ли :)

Дык там может и не в коллекции дело, изза чего падает
по описанию - вся проблема в несинхронизированном доступе к к коллекции
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38927054
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shtolz,сегодня, 04:18 [17472680]
>...Из внешнего источника мне приходит ...

Между источниками данных и обработчиками их ставлю демпфирующую кольцевую структуру (вектор + указатель записи + указатель чтения).
И не соль, сколько пишут и сколько читают. Только размер вектора демпфера должен соответствовать ... или потеря данных

С уважением,
Владимир.
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38927286
Shtolz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAГуглить: c# thread-safe collections

Thread-safe структуры данных .NET 4 (ч. 1)
Thread-safe структуры данных .NET 4 (ч.2)

Как устроен ConcurrentBag в .Net
Concurrency структуры в .net. ConcurrentDictionary изнутри
Спасибо, помогло! Всеб так отвечали коротко и по существу =))

petalvik Reactive Extensions (RX) .
Давненько хотел поковырять вот и повод =)

Изопропилпо описанию - вся проблема в несинхронизированном доступе к к коллекции
Да, действительно дело было в несинхронизированном доступе! Спасибо.

ВМоисеевставлю демпфирующую кольцевую структуру

Простите за невежество, но шо це таке? Вроде по отдельности слова знакомые, а вместе как то не вяжутся=))
...
Рейтинг: 0 / 0
Непрерывное получение данных
    #38928049
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Shtolz, вчера, 10:08 [17475152]
>Простите за невежество, но шо це таке?

Пример на C#

using System;
namespace ns_Реп {
//--Класс для работы с циклическим массивом ошибок
//================================================
static class цмо { //-- ЦиклическийМассивОшибок
private static int intУЗ=0; //-- Указатель записи (индекс вектора)
private static int intУЧ=0; //-- Указатель чтения (индекс вектора)
private static int intРазмерЦМ=256; //-- размер циклического массива в сообщениях
private static byte[][] цм=new byte[intРазмерЦМ][];

//-- Читаем ошибку из циклического массива ошибок
//-- выход: byte[] - байтовая строка ошибки
//=================================================
public static byte[] fЧтениеОшибки() {
byte[] abb=null;
lock(цм){
if(intУЗ!=intУЧ){ //-- Есть не обработанное сообщение
abb=цм[intУЧ];
if(++intУЧ==intРазмерЦМ) intУЧ=0; //-- Здесь можно и так intУЧ = ++intУЧ & 255
}
}
return abb;
}
//-- Пишем ошибку в циклической массив ошибок
//-- byte[] - байтовая строка ошибки
//-- если byte[] ответа =null, то штатно
//=================================================
public static byte[] fЗаписьОшибки(byte[] bbb) {
lock(цм){
цм[intУЗ]=bbb;
//-- Корректируем указатели
if(++intУЗ==intРазмерЦМ) intУЗ=0; //-- Здесь можно и так intУЧ = ++intУЧ & 255
if(intУЗ==intУЧ) {if(++intУЧ==intРазмерЦМ) intУЧ=0;} //-- Здесь можно и так if(intУЗ==intУЧ) intУЧ = ++intУЧ & 255
}
return null;
}
}

Иногда надо, что-бы все читающие потоки по-отдельности обрабатывали все сообщения поставленные потоками пишущими - тогда у каждого читающего свой указатель чтения (УЧ).

С уважением,
Владимир
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непрерывное получение данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]