|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
Доброго времени суток! Собстно ситуация: Из внешнего источника мне приходит набор необработанных данных, которые в конечном итоге должны превратиться в List<T>. Набор данных приходит по событию с определенной периодичностью и может содержать или не содержать новые записи. В конечном итоге нужно держать List<T> в актуальном состоянии с обработанными мною данными и было бы не плохо получать события при появлении новых записей. Пробовал запускать обработку полученных данных при возникновении события и происходит какая-то ахинея... вылетают NullReferenceExceptions и прочая ересь, в листе появляются дубликаты в общем жуть. Попробовал вместо событий просто в цикле выдавать те же наборы и обрабатывать их - все проходит нормально, значит обработка более менее работает. так как события возникают достаточно часто (где то каждые 200ms)у меня сложилось впечатление что события плодят кучу потоков на обработку и все потоки одновременно срут работают с одним объектом List<T> и где то тут собака зарыта. Ну и собстно вопрос: Что гуглить? Где по быстрому инфу найти? Да и на досуге бы почитать по этой теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 04:18 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
Shtolz, debugger на всякой ахинеи не пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 06:13 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
какой дебаггер . или потокобезопасные коллекции использовать или самостоятельно доступ синхронизировать ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 09:25 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
Изопропилкакой дебаггер . встроенный. Когда будет NullReferenceException, все станет понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 09:45 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
ShtolzЧто гуглить? Где по быстрому инфу найти? Да и на досуге бы почитать по этой теме. Гуглить: c# thread-safe collections Thread-safe структуры данных .NET 4 (ч. 1) Thread-safe структуры данных .NET 4 (ч.2) Как устроен ConcurrentBag в .Net Concurrency структуры в .net. ConcurrentDictionary изнутри ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 09:49 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
PallarisИзопропилкакой дебаггер . встроенный. Когда будет NullReferenceException, все станет понятноВ многопоточном-то приложении? Вряд-ли :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 09:51 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
Спасибо за ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 11:30 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
skyANAPallarisпропущено... встроенный. Когда будет NullReferenceException, все станет понятноВ многопоточном-то приложении? Вряд-ли :) Дык там может и не в коллекции дело, изза чего падает ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 13:27 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
PallarisИзопропилкакой дебаггер . встроенный. Когда будет NullReferenceException, все станет понятно PallarisskyANAпропущено... В многопоточном-то приложении? Вряд-ли :) Дык там может и не в коллекции дело, изза чего падает по описанию - вся проблема в несинхронизированном доступе к к коллекции ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 14:24 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
>Shtolz,сегодня, 04:18 [17472680] >...Из внешнего источника мне приходит ... Между источниками данных и обработчиками их ставлю демпфирующую кольцевую структуру (вектор + указатель записи + указатель чтения). И не соль, сколько пишут и сколько читают. Только размер вектора демпфера должен соответствовать ... или потеря данных С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2015, 15:25 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
skyANAГуглить: c# thread-safe collections Thread-safe структуры данных .NET 4 (ч. 1) Thread-safe структуры данных .NET 4 (ч.2) Как устроен ConcurrentBag в .Net Concurrency структуры в .net. ConcurrentDictionary изнутри Спасибо, помогло! Всеб так отвечали коротко и по существу =)) petalvik Reactive Extensions (RX) . Давненько хотел поковырять вот и повод =) Изопропилпо описанию - вся проблема в несинхронизированном доступе к к коллекции Да, действительно дело было в несинхронизированном доступе! Спасибо. ВМоисеевставлю демпфирующую кольцевую структуру Простите за невежество, но шо це таке? Вроде по отдельности слова знакомые, а вместе как то не вяжутся=)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2015, 10:08 |
|
Непрерывное получение данных
|
|||
---|---|---|---|
#18+
>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; } } Иногда надо, что-бы все читающие потоки по-отдельности обрабатывали все сообщения поставленные потоками пишущими - тогда у каждого читающего свой указатель чтения (УЧ). С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2015, 14:14 |
|
|
start [/forum/topic.php?fid=20&msg=38926954&tid=1401700]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 233ms |
0 / 0 |