在 C# 中,使用完全限定名称比使用“using”指令更高效吗?

In C#, is it more performant to use fully qualified names vs the 'using' directive?

提问人:johntrepreneur 提问时间:3/14/2013 最后编辑:Communityjohntrepreneur 更新时间:7/12/2014 访问量:3212

问:

在 C# 中,当您为命名空间添加 using 指令时,它允许您访问该特定命名空间中的所有类型。但是,如果命名空间有很多类型,而我只需要一个特定的类型,我通常只使用完全限定名称,认为我不想提供任何不必要的类,我知道我不会使用(特别是如果该命名空间中有很多类)出于性能原因。我在想,必须对性能产生一些影响(无论多么微小)才能使它们可用,而不是不可用,但有多大?(如果真的有的话)。如果是这样,那么到处这样做会不会是不好的做法,因为这样它不会开始积累到一些值得注意的东西(性能方面)吗?

我确实看到了另一篇关于使用指令与完全限定名称的 SO 帖子,但它不是关于性能的。using

C# .NET 性能 using 指令

评论

2赞 Sam 3/14/2013
添加 using 指令不会影响运行时性能。查看 stackoverflow.com/questions/14580606/...
0赞 Mark Segal 3/14/2013
我不确定,也许这只是语法糖的问题?

答:

7赞 Andras Zoltan 3/14/2013 #1

没有区别。

它可能对编译器性能的影响/好处可以忽略不计(即可能无法衡量),例如在运行 msbuild 时,但在运行时,IL 显式知道预期的类型,因为它作为类型句柄在代码中烘焙。除非使用反射,否则不会“搜索”类型。

评论

2赞 Marc Gravell 3/14/2013
次要术语,但我会说它“明确”知道预期的类型......
29赞 O. R. Mapper 3/14/2013 #2

该指令只是在编译过程中消失的句法糖。命名空间是否通过完全限定的类型名称包含在完全限定的类型名称中或是否在生成的字节码中完全无关紧要。因此,在运行时使用其中之一不会带来性能优势。usingusing

3赞 Agustin Meriles 3/14/2013 #3

我必须说,不。 编译器将生成相同的 IL 代码,因此您不必担心这一点。

0赞 Rahul Ranjan 3/14/2013 #4

那要看情况。

使用 using 指令可帮助您更快地编写代码。 但是,如果您有 2 个使用 using 指令的命名空间,它们都具有具有相同名称且具有相同签名的方法,则会遇到麻烦。

使用完整的限定引用可以使代码更易于理解。