Middle
Y a-t-il un dictionnaire statique, et nous voulons y écrire depuis différents threads. Quelle est la meilleure façon de le faire?
sobes.tech IA
Réponse de l'IA
Для безопасной записи в статичный словарь из разных потоков в C# лучше использовать класс ConcurrentDictionary<TKey, TValue>. Он специально разработан для потокобезопасной работы с коллекциями и позволяет одновременно читать и писать без блокировок, что повышает производительность по сравнению с обычным словарём с внешней синхронизацией.
Пример использования:
using System.Collections.Concurrent;
static class MyStaticClass
{
private static ConcurrentDictionary<string, int> _dict = new ConcurrentDictionary<string, int>();
public static void AddOrUpdate(string key, int value)
{
_dict.AddOrUpdate(key, value, (k, oldValue) => value);
}
public static bool TryGetValue(string key, out int value)
{
return _dict.TryGetValue(key, out value);
}
}
Если по каким-то причинам нужно использовать обычный Dictionary, то придётся оборачивать доступ к нему в блоки lock, что может привести к блокировкам и снижению производительности.