Big-O of .GetProperties () - PullRequest
       26

Big-O of .GetProperties ()

5 голосов
/ 26 марта 2012

Если имеется n свойств, то является ли Big-O из .GetProperties O (n) или есть процессы, связанные с отражением, которые увеличивают сложность?

Скажем, есть этот определенный класс:

public class Reflector
{
 public string name { get; set; }
 public int number { get; set; }
 public bool flag { get; set; }
 public List<string> etc { get; set; }
}

И тогда этот звонок сделан:

var reflect = new Reflector();
PropertyInfo[] properties = reflect.GetType().GetProperties();

Какова временная сложность, то есть Big-O, .GetProperties()? Учитывая, что существует 4 свойства, это займет всего 4 итерации или это сложнее? Или это O (1) с некоторым стандартным набором сложности, чтобы добраться до списка - который, кажется, все еще должен быть O (n) только для построения массива свойств?

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Big-O - это асимптотическая сложность, другими словами, O (n) относится только к большим значениям n.
У класса никогда не будет достаточно свойств, чтобы сделать это актуальным.

В практических целях вы также можете рассмотреть это O (1), но с очень большой константой.

Эта проблема выражается в наносекундах, а не в обозначениях Big-O.

3 голосов
/ 26 марта 2012

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

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

...