Влияние эффективности неиспользуемых "использования" директив в С#
Просто интересно.
Имеет ли значение, добавляю ли несколько директив using
в начале моего кода, который я не использую в своем коде. Вот так.
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.IO;
//using blah.. blah.. blah..;
public class myClass
{
// Class members
}
Я знаю, что это хорошая практика, чтобы удалить их, и у нас есть короткая полная поддержка .Net IDE, чтобы сделать это, но мне просто интересно узнать об этом.
Ответы
Ответ 1
Экстра Using
директивы не будут иметь влияния на память/производительность для конечного приложения - это ничего, кроме компиляторов, которые содержат ярлыки для обработки имен длинного типа. Компилятор использует эти пространства имен для разрешения неквалифицированных (или частично квалифицированных) имен типов для исправления типов.
Ответ 2
Как раз для полноты, IL генерировал для этого:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hello World!");
}
}
}
и это:
class Program
{
static void Main(string[] args)
{
System.Console.Write("Hello World!");
}
}
точно такие же:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Hello World!"
IL_0006: call void [mscorlib]System.Console::Write(string)
IL_000b: nop
IL_000c: ret
} // end of method Program::Main
Ответ 3
В вашей заявке нет производительности. Это просто ярлык, который вы используете, чтобы не набирать всю квалификацию. например.
var f = new File()
вместо
var f= new System.IO.File();
ОДНАКО. это влияет на производительность вашей среды разработки (IDE) несколько, потому что чем больше использования утверждений вы используете, тем больше увеличивается кеш автозаполнения. Это делает время поиска немного медленнее. Но это обычно едва заметно.
Этот совет не применяется к добавлению ссылок на сборки для вашего проекта. Если вы добавите ссылку на MyGloriousLibrary.DLL и никогда не используете ее, у вас будет плохое время.
Ответ 4
Это не влияет на общую производительность или использование памяти вашего приложения. Директивы using находятся только во время компиляции, так что вам не нужно каждый раз выписывать полное имя класса. После компиляции кода ничего не осталось от этих директив (скомпилированный код всегда использует полные имена типов).