静态内部类会影响性能吗?还是我应该将相同的静态类编写为非内部类?
静态内部类会影响性能吗?还是我应该将相同的静态类编写为非内部类?
public static class OuterClass
{
public static int GetNumber()
{
return 1;
}
public static string GetString()
{
return "Hello, World!";
}
}
public class Program
{
private static class InnerClass
{
public static int GetNumber()
{
return 1;
}
public static string GetString()
{
return "Hello, World!";
}
}
const int N = 1000000;
public static void Main()
{
var sw = Stopwatch.StartNew();
for (int i = 0; i < N; ++i)
{
int x = OuterClass.GetNumber();
string s = OuterClass.GetString();
}
sw.Stop();
TimeSpan outerTime = sw.Elapsed;
sw.Reset();
sw.Start();
for (int i = 0; i < N; ++i)
{
int x = InnerClass.GetNumber();
string s = InnerClass.GetString();
}
sw.Stop();
TimeSpan innerTime = sw.Elapsed;
Console.WriteLine("Outer took {0:0.00} ms.", outerTime.TotalMilliseconds);
Console.WriteLine("Inner took {0:0.00} ms.", innerTime.TotalMilliseconds);
}
}
输出:
外部类花费了0.28毫秒。 内部类花费了0.27毫秒。
我运行了几次,数字一直都是相同的。
*假设您正在询问访问外部静态类与内部静态类成员(例如调用方法)的成本。如果我误解了,请忽略此测试。
嵌套类关乎语义和可见性,而这些几乎总是比性能更重要。
我们应该忘记小的效率问题,大约97%的时间:过早优化是万恶之源。(唐纳德·克努斯)
除此之外,我非常有信心说没有(重要的)性能差异 - 它只是一个具有不同可见性的普通类。也许在类初始化或使用反射时有一些细微差别,但那几乎不重要。