.Net4 Gem: ConcurrentDictionary - Советы и хитрости - PullRequest
12 голосов
/ 20 апреля 2010

Я начал использовать новый ConcurrentDictionary из .Net4 для реализации простого кэширования для многопоточного проекта.

Но мне интересно, о чем я должен заботиться / быть осторожным при его использовании?

Каким был ваш опыт его использования?

Ответы [ 3 ]

20 голосов
/ 21 апреля 2010

Члены являются поточно-ориентированными, но не следует ожидать, что последовательность вызовов будет поточно-ориентированной. Например, вы не можете ожидать, что следующее будет поточно-ориентированным:

if (!dictionary.ContainsKey(key))
{
    // Another thread may have beaten you to it
    dictionary.Add(key, value);
}

Вместо этого используйте новый потокобезопасный API - например, AddOrUpdate (последний выигрывает в случае состояния гонки) или GetOrAdd (первый выигрывает в случае условия гонки).

2 голосов
/ 20 апреля 2010

У меня до сих пор не было проблем с объектами коллекции Concurrent. Они значительно повышают мою производительность, позволяя мне , а не беспокоиться о проблемах параллелизма с коллекциями и сосредоточиться на написании логики приложения.

Это не значит, что нет проблем. Просто ничего, с чем я столкнулся.

0 голосов
/ 20 апреля 2010

ConcurrentDictionary является потокобезопасным. Вам не нужно беспокоиться об этом, даже если вы используете его из нескольких потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...