• FrozenDictionary: UM FrozenDictionary Representa um dicionário somente leitura que é otimizado para pesquisas rápidas. Você pode usar esta coleção quando a coleção precisar ser criada uma vez e lida com frequência.
  • FrozenSet: UM FrozenSet Representa um conjunto imutável somente leitura otimizado para pesquisas rápidas e enumeração. Como um FrozenDictionaryvocê não pode alterar esta coleção após a criação.

Porque ambos FrozenSet e FrozenDictionary são coleções somente leitura, você não pode adicionar, alterar ou remover itens nessas coleções.

Crie coleções congeladas em C#

O snippet de código a seguir mostra como você pode criar um FrozenSet de um HashSet Instância, preencha -o com dados de amostra e, em seguida, procure um item dentro dele. Lembre -se de que um HashSet é uma coleção não ordenada de elementos exclusivos que suporta operações de conjunto (união, cruzamento etc.) e usa uma tabela de hash para armazenamento.


var hashSet = new HashSet { "A", "B", "C", "D", "E" };
var frozenSet = hashSet.ToFrozenSet();
bool isFound = frozenSet.TryGetValue("A", out _);

No trenó de código anterior, o ToFrozenSet() o método é usado para converter um HashSet instância para um FrozenSet exemplo. O método TryGetValue() voltará true Neste exemplo, porque os dados pesquisados ​​estão presentes na coleção.

O código a seguir mostra como você pode criar um FrozenDictionaryarmazene os dados e pesquise uma chave específica na coleção.


var dictionary = new Dictionary
{
    { 1, "A" },{ 2, "B" },{ 3, "C" },{ 4, "D" },{ 5, "E" }
};
var frozenDictionary = dictionary.ToFrozenDictionary();
bool isFound = dictionary.TryGetValue(7, out _);

Quando o código acima é executado, o TryGetValue o método retornará false Porque a chave 7 não está disponível na coleção.

Desempenho de benchmarking de coleções congeladas no .NET Core

Vamos agora comparar o desempenho de uma coleção congelada, especificamente um FrozenSetcontra outros tipos de coleção usando a biblioteca BenchmarkDotnet. Para comparação, usaremos um Lista HashSete um ImmutableHashSet.

Lembre -se de que um List é uma coleção mutável, fortemente ticada, de tamanho dinamicamente, de elementos (até duplicados), e que um HashSet é uma coleção mutável e baseada em matriz de elementos exclusivos que é otimizada para pesquisas rápidas. Observe que a complexidade do tempo para pesquisar um item em um HashSet é O (1), comparado a uma complexidade de tempo de O (n) para um List (onde n é o número de elementos na coleção). Claramente, a HashSet é útil nos casos em que o acesso rápido é necessário. A desvantagem, um HashSet consome mais memória do que um List e não pode incluir elementos duplicados. Você deve usar um List Se você deseja armazenar uma coleção ordenada de itens (possivelmente duplicados) e onde o consumo de recursos é uma restrição.