ОБНОВЛЕНИЕ: см. ответ @ Марко для объяснения начальной задержки из-за связи лямбда.
Более высокое время выполнения для первого вызова, вероятно, является результатом эффекта JIT . Короче говоря, компиляция JIT байтовых кодов в собственный машинный код возникает в первый раз, когда вы вызываете свой метод. JVM затем пытается продолжить оптимизацию, идентифицируя часто называемые (горячие) методы и повторно генерируя свои коды для повышения производительности.
Во всяком случае, чтобы избежать этой оптимизации, чтобы я мог проверить истинное время выполнения ?
blockquote>Вы можете наверняка объяснить начальную разминку JVM, исключив первые несколько результатов. Затем увеличьте количество повторных вызовов вашего метода в цикле из десятков тысяч итераций и сравните результаты.
Есть еще несколько параметров, которые вы можете захотеть добавить к вашему исполнению, чтобы помочь уменьшите шум, как описано в этой записи . Также есть некоторые полезные советы из этой почты .
Если Вы имеете в виду индексатор 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)
}
Как всегда документация является способом узнать.
При Исключениях:
KeyNotFoundException The property is retrieved and key does not exist in the collection
(я принимаю, Вы имеете в виду Dictionary<TKey,TValue>
, между прочим.)
Примечание, что это отличается от неуниверсальное поведение Хеш-таблицы .
, Чтобы попытаться получить значение ключа, когда Вы не знаете, существует ли оно, используйте TryGetValue.
Кроме того, к использованию TryGetValue
, можно сначала проверить, существует ли ключ с помощью dict.ContainsKey(key)
таким образом избавление от необходимости объявить значение до обнаружения при фактической необходимости в нем.
Думаю, вы можете попробовать
dict.ContainsKey(someKey)
проверить, содержит ли Словарь ключ или нет.
Спасибо