Производительность между импортом всего пространства имен и использованием псевдонима в С#?

Есть ли вообще разница в производительности между импортом всего пространства имен и использованием псевдонимов для импорта только одного класса? Если да, то насколько велика разница?


Примеры:

Импорт всего пространства имен:

using System.Reflection;

Псевдоним для импорта только одного класса:

using BindingFlags = System.Reflection.BindingFlags;

person bsara    schedule 09.07.2012    source источник
comment
возможный дубликат дает ли использование какие-либо преимущества?   -  person mbeckish    schedule 09.07.2012
comment
Псевдоним должен создавать меньше беспорядка, предлагаемого ImpediDense, э-э, IntelliSense.   -  person HABO    schedule 09.07.2012


Ответы (4)


Нуль. Импорт пространства имен — это функция времени компиляции, и сгенерированный IL будет точно таким же в любом случае.

person Alan    schedule 09.07.2012
comment
Как насчет во время выполнения, когда сборки должны быть загружены? Разве не будут загружены только указанные классы, а не все классы во всем пространстве имен? - person bsara; 09.07.2012
comment
@Brandon Последствия для производительности заключаются в добавлении .dll в качестве ссылки на проект. Добавление оператора using не влияет на то, что загружается или не загружается из этих DLL. - person Servy; 09.07.2012
comment
@Brandon: Это совсем другой аспект. Импорт пространства имен просто экономит время/улучшает читабельность исходного кода, результирующий код точно такой же, как если бы вы напечатали такие вещи, как System.Collections.Generic.List‹string› (например). Загрузка сборки и разрешение типов не связаны напрямую с импортом пространств имен. - person Alan; 09.07.2012
comment
@ Алан, я просто хочу уточнить, что я правильно тебя понимаю: ты говоришь, что при компиляции генерируется точно такой же код ... независимо от того, как я импортировал свое пространство имен? т.е. где я вижу Exception e в своем исходном коде, я действительно увижу System.Exception e (или некоторую ссылку на этот эффект) независимо от псевдонимов или импорта всего пространства имен в скомпилированном коде? - person bsara; 09.07.2012
comment
@Брэндон: Точно, да. (Кроме того, вы можете использовать Reflector или любой другой дизассемблер IL для проверки.) - person Alan; 09.07.2012

Нет, это просто помощь программисту, CIL, сгенерированный компилятором, точно такой же.

person BlackBear    schedule 09.07.2012
comment
CIL не генерируется ни для того, ни для другого, не так ли? Что бы он содержал? Это директива времени компиляции - person Kieren Johnstone; 09.07.2012
comment
@KierenJohnstone: Конечно, я хотел сказать, что CIL, сгенерированный для всей программы, одинаков. - person BlackBear; 09.07.2012

Разницы в производительности нет. Один говорит: «Посмотрите сюда, когда я указываю имя класса, оно может быть здесь». Другой говорит: «Когда я говорю этот класс или пространство имен, я имею в виду использовать это».

person Kieren Johnstone    schedule 09.07.2012

Нет, но еще шире. Вы загружаете dll, содержащую ядро ​​.net, и в нем будут десятки пространств имен. Вы действительно не получите удар по импорту пространств имен, пока не выйдете за пределы уже загруженной dll.

person WhiteleyJ    schedule 09.07.2012