views:

3641

answers:

12

For example, I rarely need:

using System.Text;

but it's always there by default. I assume the application will use more memory if your code contains unnecessary using directives. But is there anything else I should be aware of?

Also, does it make any difference whatsoever if the same using directive is used in only one file vs. most/all files?


Edit: Note that this question is not about the unrelated concept called a using statement, designed to help one manage resources by ensuring that when an object goes out of scope, its IDisposable.Dispose method is called. See Uses of "using" in C#.

+46  A: 

It won't change anything when your program runs. Everything that's needed is loaded on demand. So even if you have that using statement, unless you actually use a type in that namespace / assembly, the assembly that using statement is correlated to won't be loaded.

Mainly, it's just to clean up for personal preference.

Darren Kopp
The <code>using</code> statement is not related in any way to the assembly loading.
Franci Penov
In markdown, indent your code by 4 spaces to get code formatting, however, these comment boxes don't support markdown at all anyways.
FlySwat
@francip - that's what i'm saying. using doesn't affect assembly loading, an assembly isn't loaded until a type contained in the assembly is referenced.
Darren Kopp
but it can affect compilation time and Intellisense/IDE responsiveness.
Marchy
Franci/FlySwat: http://meta.stackoverflow.com/questions/24793/how-to-use-formatting-in-comments
JohnB
+2  A: 

Your application will not use more memory. Its for the compiler to find classes you use in the code files. It really doesnt hurt beyond not being clean.

mattlant
A: 

The 'using' statement does not affect performance as it is merely a helper in qualifying the names of your identifiers. So instead of having to type, System.IO.Path.Combine(...), you can simply type, Path.Combine(...) if you have using System.IO.

j0rd4n
A: 

Do not forget that the compiler do a lot of work to optimize everything when building your project. Using that is used in a lot of place or 1 shouldn't do a different once compiled.

Daok
A: 

It’s personal preference mainly. I clean them up myself (Resharper does a good job of telling me when there’s unneeded using statements).

One could say that it might decrease the time to compile, but with computer and compiler speeds these days it just wouldn’t make any perceptible impact.

Josh Sklare
A: 

They are just used as a shortcut. For example, you'd have to write: System.Int32 each time if you did not have a using System; on top.

Removing unused ones just makes your code look cleaner.

Carra
+14  A: 

There's no IL construct that corresponds to using. Thus, the using statements do not increase your application memory, as there is no code or data that is generated for it.

Using is used at compile time only for the purposes of resolving short type names to fully qualified type names. Thus, the only negative effect unnecessary using can have is slowing the compile time a little bit and taking a bit more memory during compilation. I wouldn't be worried about that though.

Thus, the only real negative effect of having using statements you don't need is on intellisense, as the list of potential matches for completion while you type increases.

Franci Penov
+2  A: 

You may have name clashes if you call your classes like the (unused) classes in the namespace. In the case of System.Text, you'll have a problem if you define a class named "Encoder".

Anyways this is usually a minor problem, and detected by the compiler.

Pablo Fernandez
A: 

Leaving extra using directives is fine. There is a little value in removing them, but not much. For example, it makes my IntelliSense comletion lists shorter, and therefore easier to navigate.

The compiled assemblies are not affected by extraneous using directives.

Sometimes I put them inside a #region, and leave it collapsed; this makes viewing the file a little cleaner. IMO, this is one of the few good uses of #region.

Jay Bazuzi
A: 

The using statement just keeps you from qualifying the types you use. I personally like to clean them up. Really it depends on how a loc metric is used

CheeZe5
+4  A: 

Code cleanliness is important.

One starts to get the feeling that the code may be unmaintained and on the browfield path when one sees superfluous usings. In essence, when I see some unused using statements, a little yellow flag goes up in the back of my brain telling me to "proceed with caution." And reading production code should never give you that feeling.

So clean up your usings. Don't be sloppy. Inspire confidence. Make your code pretty. Give another dev that warm-fuzzy feeling.

Chris
+79  A: 

There are few reasons for removing unused using(s)/namespaces, besides coding preference:

  • removing the unused using clauses in a project, can make the compilation faster because the compiler has fewer namespaces to look-up types to resolve. (this is especially true for C# 3.0 because of extension methods, where the compiler must search all namespaces for extension methods for possible better matches, generic type inference and lambda expressions involving generic types)
  • can potentially help to avoid name collision in future builds when new types are added to the unused namespaces that have the same name as some types in the used namespaces.
  • will reduce the number of items in the editor auto completion list when coding, posibly leading to faster typing (in C# 3.0 this can also reduce the list of extension methods shown)

What removing the unused namespaces won't do:

  • alter in any way the output of the compiler.
  • alter in any way the execution of the compiled program (faster loading, or better performance).

The resulting assembly is the same with or without unused using(s) removed.

Pop Catalin