C#: Что делает [строка] индексатор возврата Словаря?

ОБНОВЛЕНИЕ: см. ответ @ Марко для объяснения начальной задержки из-за связи лямбда.


Более высокое время выполнения для первого вызова, вероятно, является результатом эффекта JIT . Короче говоря, компиляция JIT байтовых кодов в собственный машинный код возникает в первый раз, когда вы вызываете свой метод. JVM затем пытается продолжить оптимизацию, идентифицируя часто называемые (горячие) методы и повторно генерируя свои коды для повышения производительности.

Во всяком случае, чтобы избежать этой оптимизации, чтобы я мог проверить истинное время выполнения ?

blockquote>

Вы можете наверняка объяснить начальную разминку JVM, исключив первые несколько результатов. Затем увеличьте количество повторных вызовов вашего метода в цикле из десятков тысяч итераций и сравните результаты.

Есть еще несколько параметров, которые вы можете захотеть добавить к вашему исполнению, чтобы помочь уменьшите шум, как описано в этой записи . Также есть некоторые полезные советы из этой почты .

24
задан Marc Gravell 29 December 2008 в 14:18
поделиться

4 ответа

Если Вы имеете в виду индексатор Dictionary<string,SomeType>, то необходимо видеть исключение (KeyNotFoundException). Если Вы не хотите его к ошибке:

SomeType value;
if(dict.TryGetValue(key, out value)) {
   // key existed; value is set
} else {
   // key not found; value is default(SomeType)
}
25
ответ дан Marc Gravell 28 November 2019 в 23:18
поделиться

Как всегда документация является способом узнать.

При Исключениях:

KeyNotFoundException
The property is retrieved and key does not exist in the collection

(я принимаю, Вы имеете в виду Dictionary<TKey,TValue>, между прочим.)

Примечание, что это отличается от неуниверсальное поведение Хеш-таблицы .

, Чтобы попытаться получить значение ключа, когда Вы не знаете, существует ли оно, используйте TryGetValue.

14
ответ дан Jon Skeet 28 November 2019 в 23:18
поделиться

Кроме того, к использованию TryGetValue, можно сначала проверить, существует ли ключ с помощью dict.ContainsKey(key) таким образом избавление от необходимости объявить значение до обнаружения при фактической необходимости в нем.

4
ответ дан Kon 28 November 2019 в 23:18
поделиться

Думаю, вы можете попробовать

dict.ContainsKey(someKey)

проверить, содержит ли Словарь ключ или нет.

Спасибо

5
ответ дан 28 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: