Является ли использование пространств имен на каждой странице плохой практикой /снижает производительность или использование памяти

В C # мы пишем using System.IO или любое другое пространство имен, которое мы хотим использовать.

Так это плохая привычка, влияет ли она на производительность или память?

Или хорошо создавать классы-обертки для них и использовать их, чтобы не использовать везде одно и то же пространство имен?

4 голоса | спросил 1Mayur 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:14:19 +0400 2012, 20:14:19

5 ответов


0

В .Net пространство имен всегда является неотъемлемой частью имени каждого типа. Однако, если бы вам приходилось указывать все пространство имен каждый раз, когда вы объявляете определенный тип, это вызвало бы огромное повторение и шум в коде. Это то, для чего используется директива using, она по существу сворачивает все префиксы в одно место, заставляя вас указать «последний» раздел типа. Это можно сделать только в том случае, если нет неясностей.

Однако компилятору все равно. Таким образом, существует этап предварительной компиляции, на котором каждое объявление типа, основанное на директиве using, получает свой префикс обратно.

Итак, когда вы говорите:

Using System;

void foo()
{
   String s1 = "bla";
   String s2 = "bli";
}

В предварительной компиляции происходит следующее: добавление пространства имен System к каждому String объявление, например:

void foo()
{
   System.String s1 = "bla";
   System.String s2 = "bli";
}

И только теперь компилятор действительно работает.

Что касается производительности, технически это может повлиять на производительность процесса сборки. Чем больше вы используете, тем больше соответствия нужно выполнить на этапе предварительной компиляции: таким образом, компилятор видит String. Что это String? Это System.String или SomeOtherNamespace.String? На самом деле происходит то, что компилятор добавляет каждое пространство имен, которое он находит в использовании, к объявлению типа и проверяет, существует ли такой тип. Если да - отлично, если нет - он пробует следующее пространство имен.

Итак, вы видите, что если у вас много файлов с неиспользованными объявлениями using, компилятор обязательно выполняет избыточную работу. В крайних случаях это может значительно снизить производительность самой сборки.

В общем, никогда не стесняйтесь использовать то, что вы используете (без каламбура). Но вам следует избегать объявления ненужных директив using не только из-за потенциального (маловероятного) влияния производительности на длительность сборки, но и потому, что вы хотите чтобы ваш код был максимально чистым.

ответил Vitaliy 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:37:51 +0400 2012, 20:37:51
0

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

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

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

Подумайте об использовании команды «Удалить неиспользованные использования» в Visual Studio, которая удалит операторы using для пространств имен, которые фактически не используются. , Я использую его часто, но только для того, чтобы файлы были компактными, а не для повышения производительности.

ответил Guffa 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:23:00 +0400 2012, 20:23:00
0

Вы можете использовать, не важно, чтобы это не влияло на вашу производительность (рекомендуется использовать код, не используя правый клик)

Все загружается, когда это необходимо.

ответил Aghilas Yakoub 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:17:58 +0400 2012, 20:17:58
0

Компилятор выполняет оптимизацию для нас за включение связанного assemblies of namespaces where required, поэтому вам не требуется оболочка для оптимизации. Лучше включить все пространство имен, требуемое классом, с помощью using statement on the top.

ответил Adil 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:17:19 +0400 2012, 20:17:19
0

Когда вы кладете с помощью System.IO; в начале файла вы говорите компилятору C # рассмотреть это пространство имен для поиска имен классов. Это никак не влияет на производительность программы.

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

ответил aiodintsov 8 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 08 Sep 2012 20:43:39 +0400 2012, 20:43:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132