Замедлит ли Type.GetType () размер и сложность объекта, который вы извлекаете? - PullRequest
9 голосов
/ 11 января 2012

У меня есть приложение, которое использует базовое отражение сегодня для захвата классов.

Type type = Type.GetType(mynamespace.myclassname);
object o = System.Activator.CreateInstance(type);

Я хотел посмотреть, насколько эффективно работает отражение, поэтому я сгенерировал около 150 000 объектов таким образом, чтобы увидеть, будет ли когда-либо производительностьУхудшение, производительность была быстрой и стабильной.

Однако, это заставило меня задуматься: не замедлится ли вызов Type.GetType () в зависимости от размера и сложности класса, передаваемого в метод GetType ()?

Например: допустим, мы хотели использовать GetType () для извлечения сложного класса, состоящего из 30 закрытых переменных, 30 закрытых методов и 30 открытых методов, по сравнению с классом, который имеет только один очень простой открытый Add (int), int) метод, который суммирует два числа.

Будет ли Type.GetType значительно замедляться, если передаваемый класс будет сложным классом по сравнению с простым классом?

спасибо

Ответы [ 2 ]

7 голосов
/ 11 января 2012

Согласно моему пониманию вещей (а я просто скромный опытный программист, я не являюсь одним из создателей языка), сложность класса, на который ссылаются, никоим образом не влияет на производительность.GetType().

Сложность созданного экземпляра класса, конечно, повлияет на производительность CreateInstance(), но этого следует ожидать: чем больше класс, тем больше в нем содержимого, тем больше кода нужно будет выполнитьчтобы полностью его построить.

Возможно, вы путаете GetType() с CreateInstance(), потому что я заметил, что вы говорите: "Будет ли Type.GetType значительно замедляться при создании экземпляра сложного класса по сравнению с простым классом?"в то время как на самом деле GetType() ничего не создает, CreateInstance() делает.

5 голосов
/ 11 января 2012

Экземпляр объекта Type, соответствующий вашему типу, создается при загрузке типа.Этот (одноразовый) процесс, очевидно, будет более или менее дорогим в зависимости от реализации типа.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...