TG Telegram Group & Channel
.NET Разработчик | United States America (US)
Create: Update:

День 2233. #ЗаметкиНаПолях
Перебираем Элементы ConcurrentDictionary
Существует несколько способов итерации по ConcurrentDictionary<TKey, TValue> в .NET. Вы можете использовать цикл foreach или свойства Keys и Values. Оба метода дают разные результаты, и вам следует выбрать тот, который лучше всего соответствует вашим потребностям.

1. Использование цикла foreach
Цикл foreach лениво выполняет итерацию по парам ключ-значение в ConcurrentDictionary. Это означает, что цикл будет извлекать следующую пару ключ-значение только тогда, когда это необходимо. Кроме того, он перечисляет «живые» данные. Т.е., если вы добавите элемент во время итерации по словарю, цикл foreach может вернуть его*.

* Из документации: Перечислитель, возвращаемый из словаря, можно безопасно использовать одновременно с чтением и записью в словарь, однако он не представляет моментальный снимок словаря. Содержимое, представленное через перечислитель, может содержать изменения, внесенные в словарь после вызова GetEnumerator.


Ещё один интересный момент заключается в том, что перечисление не блокирует словарь, поэтому не влияет на производительность.
var dict = new ConcurrentDictionary<int, string>();

foreach (var pair in dict)
{
Console.WriteLine($"{pair.Key}: {pair.Value}");
}


2. Использование свойств Keys и Values
Свойства Keys и Values возвращают снимок ключей и значений в словаре. Это означает, что коллекция, возвращаемая этими свойствами, является копией ключей и значений на момент вызова. Таким образом, если вы добавляете элемент во время итерации по словарю, свойства Keys и Values не вернут его. Кроме того, свойства Keys и Values блокируют словарь на время создания снимка. Это может повлиять на производительность, если словарь большой:
var dict = new ConcurrentDictionary<int, string>();

foreach (var key in dict.Keys)
{
Console.WriteLine($"Key: {key}");
}


Источник: https://www.meziantou.net/how-to-iterate-on-a-concurrentdictionary-foreach-vs-keys-values.htm

День 2233. #ЗаметкиНаПолях
Перебираем Элементы ConcurrentDictionary
Существует несколько способов итерации по ConcurrentDictionary<TKey, TValue> в .NET. Вы можете использовать цикл foreach или свойства Keys и Values. Оба метода дают разные результаты, и вам следует выбрать тот, который лучше всего соответствует вашим потребностям.

1. Использование цикла foreach
Цикл foreach лениво выполняет итерацию по парам ключ-значение в ConcurrentDictionary. Это означает, что цикл будет извлекать следующую пару ключ-значение только тогда, когда это необходимо. Кроме того, он перечисляет «живые» данные. Т.е., если вы добавите элемент во время итерации по словарю, цикл foreach может вернуть его*.
* Из документации: Перечислитель, возвращаемый из словаря, можно безопасно использовать одновременно с чтением и записью в словарь, однако он не представляет моментальный снимок словаря. Содержимое, представленное через перечислитель, может содержать изменения, внесенные в словарь после вызова GetEnumerator.


Ещё один интересный момент заключается в том, что перечисление не блокирует словарь, поэтому не влияет на производительность.
var dict = new ConcurrentDictionary<int, string>();

foreach (var pair in dict)
{
Console.WriteLine($"{pair.Key}: {pair.Value}");
}


2. Использование свойств Keys и Values
Свойства Keys и Values возвращают снимок ключей и значений в словаре. Это означает, что коллекция, возвращаемая этими свойствами, является копией ключей и значений на момент вызова. Таким образом, если вы добавляете элемент во время итерации по словарю, свойства Keys и Values не вернут его. Кроме того, свойства Keys и Values блокируют словарь на время создания снимка. Это может повлиять на производительность, если словарь большой:
var dict = new ConcurrentDictionary<int, string>();

foreach (var key in dict.Keys)
{
Console.WriteLine($"Key: {key}");
}


Источник: https://www.meziantou.net/how-to-iterate-on-a-concurrentdictionary-foreach-vs-keys-values.htm
👍36


>>Click here to continue<<

.NET Разработчик




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)