Я столкнулся с интересной проблемой. Зная, что concurrentdictionary безопасно перечисляется во время изменения, при этом (в моем случае) нежелательный побочный эффект итерации над элементами, которые могут исчезнуть или появляться несколько раз, я решил создать снимки сам, используя Tolist () . Поскольку COMPURRENTDICTIONARY также реализует ICOLLECTION , это вызывает список (Ienumerable Collection) для использования, что, в свою очередь, создает массив в текущем размере, используя текущий счет Icollection .copyto (t [] array, int arrayindex) , призыв к своей реализации comprourentdictionary и, наконец, выбросить аргумент Exception , если элементы добавлены в словарь, в то же время. Продолжайте ловить исключение и повторно (что определенно не является правильным ответом на проблему), или для реализации моей собственной версии Tolist () < /code>, специализированной на эту проблему (но опять же, простое увеличение списка, затем, возможно, обрезка его подходящего размера для нескольких элементов кажется переизбытком, и использование LinkedList снижает производительность, так что в зависимости от того, что в зависимости от того, что в зависимости от того, что в зависимости от того, что в зависимости от того, что в зависимости от того, что в зависимости от того, что в зависимости от того, что вы можете снизить показатели, то, что будет снижать показатели, то есть. буфера в фоновом режиме (например, OrderBy < /code>), похоже, решает проблему за счет производительности, но Bare Tolist () < /code>, очевидно, нет, и он не стоит «увеличить» с другим методом, когда не требуется дополнительная функциональность. Обходной путь, чтобы поддерживать минимум производительности при создании такого снимка? (Предпочтительно в конце некоторой магии LINQ.) < /P>
edit: < /strong> < /p>
После изучения его я могу подтвердить, toarray () < /code> (чтобы думать, что я только что прошел вчера). Снимок (например, фильтрация, сортировка) и список/массив все еще необходим в конце. (В этом случае требуется дополнительный вызов, создающий новую коллекцию снова и снова.) < /P>
Я не смог отметить, что снимок может или не может пройти через эти модификации, поэтому его следует принять в конце, предпочтительно, поэтому я добавлю это к вопросам.
Подробнее здесь: https://stackoverflow.com/questions/410 ... ding-items
Вызов ToList () на concurrentDictionary , добавляя элементы ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ConcurrentDictionary
— Как эффективно «получить N элементов, начиная с ключа K»?
Anonymous » » в форуме C# - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-