Que tipo de IProducerConsumerCollection <T> usar para minha tarefa?
Tenho exatamente 100 sensores cada um dos "dados de medição". Eu tenho exatamente um DataSender que deve enviar informações de "sensores". As informações mais recentes devem ser enviadas.
largura de banda do canal pode ser menor que os dados produzidos por 100 sensores. Nesse caso, alguns dados podem ser ignorados - mas devemos ser "mais ou menos justos". Por exemplo, podemos pular todas as segundas medidas de cada senso
Não sei com que frequência cada sensor gera dados, mas em geral eles geram dados com bastante frequênci
Depois dos meus outros posts:
como criar singleton que sempre rodando em thread separadxemplo de produtor / consumidor modificado, algum problema com elDecidi que tenho clássicos Produtor / Consumidor Problema com
100 produtores e 1 consumidor Fui sugerido para usarBlockingCollection
por esta. O único problema comBlockingCollection
- depois de adicionar o item, você não podesubstitui isto. Mas, na minha aplicação, se o sensor produzir um novo valor, e o valor anterior não foi processado peloConsumer
, o valor deve ser substituído.
Devo usar umConcurentDictionary
ouConcurentBag
para essa tarefa?
Conceitualmente,tudo que eu precis é uma matriz de 100 elemento
Sensor # 33 deveriasubstitui seu valor na matriz [33]:
| Sensor | Value |
|--------|-------|
| 1 | |
| 2 | |
| 3 | |
/......../......./
| 32 | |
| 33 | 101.9 |
| 34 | |
/......../......./
| 98 | |
| 99 | |
| 100 | |
Consumer
deve receber valor dearray[33]
e, se não for nulo, envie-o e defina a matriz [33] para nulo.Consumer
deve reagir com valores não nulos na matriz o mais rápido possíve