C #: Eu tenho que fazer ArrayList sincronizados se vários segmentos única lê-lo
-
10-07-2019 - |
Pergunta
Eu estou usando ArrayList estático em uma classe para armazenar informações sobre os campos de banco de dados não-atualizáveis. Eu estou planejando para inicializar-lo no construtor uma vez (chamada método init guardado por bloqueio no construtor). Depois que vários tópicos verificar se arraylist Contém um campo. Eu tenho que controlar esse acesso de leitura de alguma forma? Por exemplo, chamando ArrayList.Synchronized.
Solução
Não (e você precisa ter pego quando criá-la, quer contanto que você fazê-lo no construtor static
, que tem um bloqueio multithread implícita - se você não está em posição de fazer isso, você provavelmente vai querer lock). Há uma ReaderWriterLockSlim se você pode usar para controle de acesso se você acabar precisando para R / W acesso embora.
Outras dicas
No. Sincronização é necessária apenas para objetos stateful, onde você está indo para alterar o estado.
Não, desde que você está lendo você pode apenas têm-no.
Não, mas considere envolvê-lo em um ReadOnlyCollection
para make se nenhum dos tópicos podem modificá-lo.
Edit:. No entanto, para fazer isso, você precisa fazer a lista um List<T>
em vez de um ArrayList
Para a criação inicial de sua lista você pode considerar o uso de um construtor estático. Isso só vai ser chamado uma vez na primeira referência ao tipo.