静态内部类是否存在性能成本?或者我应该只写一个非内部类的静态类?静态内部类是否存在性能成本?
2
A
回答
5
如果你的业务/数据逻辑确定一个类应该是一个内部类,那么使它成为一个内部类。
如果您遇到性能问题,请进行测量以确定问题所在,然后确定要做出哪些优化。
+1
百万分之一+1)以最适合你的方式写下它。只在性能不佳时担心性能。 – 2010-07-19 22:27:17
1
嵌套类是关于语义和可见性,这些几乎总是比性能更重要。
我们应该忘记小效率,比如97%的时间:过早优化是万恶之源。 (唐纳德克努特)
除此之外,我相当有信心没有(重要的)性能差异 - 它只是一个具有不同可见度的普通类。也许在上课或使用反思时有一些细微的差别,但这应该不会有问题。
1
根据这个测试我只是跑*,没有什么区别。
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);
}
}
输出:
Outer took 0.28 ms. Inner took 0.27 ms.
我跑了几次和数字是始终不变。
*我假设你问的是访问外部静态内部静态类与内部静态类的成员(例如,调用方法调用)的成本。如果我误解了,这个测试是无关紧要的。
0
不,但是如果您使用泛型的嵌套类,会出现一些严重的语义问题。 (尽管其中一些问题相当积极,例如内部类如何继承父类的类型参数。)
相关问题
- 1. 是默认静态内部类的成员静态在java中
- 2. 声纳性能 - 静态内部类类型的令牌
- 3. 是否可以在Java中扩展非静态内部类?
- 4. 片段内部类应该是静态
- 5. 静态内部Util类的性能副作用?
- 6. C#静态类 - 静态类不能有非静态成员
- 7. 静态const成员是否有内部联动?
- 8. 静态内部类中阶
- 9. 静态内部类 - 怪异
- 10. 如何在内部静态类中使用类成员?
- 11. 是否引用静态属性导致内存泄漏
- 12. 静态类型的性能
- 13. 是否由“仅由静态成员组成”隐含的类“不能被分类”?
- 14. 是否有可能在C++中调用静态成员方法内的非静态成员方法?
- 15. 在c/C++中的CPU缓存中分配静态内存:是否有可能?
- 16. 内存分配静态变量在非静态类在.net
- 17. Servlet性能:动态生成静态内容?
- 18. 在静态内部类中引用非静态变量
- 19. 查看父类中的子类中是否存在静态属性(后期静态绑定)?
- 20. C++中是否存在类似Java的静态嵌套类?
- 21. 继承使用静态内部类构建的类生成器
- 22. 在对象之间是否存在静态局部变量?
- 23. C#内部静态外部与InternalCall属性 - 内部或外部?
- 24. 是否有可能在C#中为静态类或静态方法生成动态代理?
- 25. 外部静态函数声明是否打破内部链接?
- 26. 为什么我们可以有静态最终成员,但不能在内部类中使用静态方法?
- 27. 为什么只有Java中的静态内部类具有静态成员?
- 28. 是否在静态PageMethod线程安全内部创建类的实例?
- 29. 静态变量是否可以在C++中不存在类?
- 30. 静态成员是否存储在.NET中的固定位置?
关于c#/ java的一些问题是什么让人们对微观优化感到迷恋? – 2010-07-19 22:27:11
@Matt我不认为这是孤立的。这是每个程序员都要经历的阶段:) – 2010-07-19 22:27:56
这个问题太模糊,无法回答。你关心什么性能指标? – 2010-07-19 23:23:41