Временная сложность API .NET BCL или методов Framework - PullRequest
3 голосов
/ 06 апреля 2011

Есть ли способ узнать точное время сложности для предопределенных методов .NET.Например, если я хочу узнать сложность для

String.Contains() 

или

 Hashtable.ContainsKey()

Делится ли Microsoft этой информацией?

Ответы [ 5 ]

3 голосов
/ 06 апреля 2011

Да, в MSDN:)

  1. Метод Hashtable.ContainsKey :

Этот метод является операцией O (1).

  1. Метод Enumerable.Contains (IEnumerable, TSource) :

Если тип источника реализует ICollection,Содержит метод в этой реализации вызывается для получения результата.В противном случае этот метод определяет, содержит ли источник указанный элемент.

Перечисление прекращается, как только найден соответствующий элемент.

Итак, для String это будет O (n).

1 голос
/ 06 апреля 2011

В нескольких постах упоминается Reflector, который является хорошим инструментом, но больше не является бесплатным. Бесплатный инструмент, который предоставляет аналогичную услугу: ILSpy , стоит посмотреть, если вы не хотите покупать отражатель.

0 голосов
/ 06 апреля 2011

Вы можете легко это выяснить, используя Reflector и Code Metrics addin.

0 голосов
/ 06 апреля 2011

Reflector - очевидный выбор, чтобы найти нужную вам информацию, как указано в других ответах. Тем не менее, это больше не бесплатный инструмент, хотя и не слишком дорогой.

Свободной альтернативой является поиск исходного кода для библиотек .NET Framework. Скотт Гатри имеет сообщение , в котором содержится некоторая информация и ссылки на доступ и отладку исходного кода.

0 голосов
/ 06 апреля 2011

Одна из возможностей - использовать такой инструмент, как Reflector , и посмотреть на реализацию методов самостоятельно. После этого вы сможете определить сложность для большинства методов (если они полагаются на многие другие методы, может быть затруднительно проследить все вызовы для выполнения расчетов).

Я не думаю, что есть страница, которая явно перечисляет сложность для всех методов.

...