C# N个静态字段与单个静态实例
我正在研究单例格式,它与我以前使用的非常相似 我的问题是,这两种方法在内存和/或性能方面是否有任何区别,第二种方法是否更快,足以掩盖其使用量更大而无法写入和读取 下面是一个示例代码: 方法1C# N个静态字段与单个静态实例,c#,static,C#,Static,我正在研究单例格式,它与我以前使用的非常相似 我的问题是,这两种方法在内存和/或性能方面是否有任何区别,第二种方法是否更快,足以掩盖其使用量更大而无法写入和读取 下面是一个示例代码: 方法1 public static class TheSomething { public static String Title; public static String Description; public static String HowIsIt; public stat
public static class TheSomething {
public static String Title;
public static String Description;
public static String HowIsIt;
public static int TimesSeenCount;
public static List<Long> PeopleWhoSawIt;
public static List<Session> PeopleSeeingIt;
// now some math mumbo jumbo just to increase the memsize of this:
public static double posX;
public static double posY
public static double posZ;
public static double velX;
public static double velY;
public static double velZ;
public static double accX;
public static double accY;
public static double accZ;
public static double rotX;
public static double rotY;
public static double rotZ;
public static double rotVelX;
public static double rotVelY;
public static double rotVelZ;
public static double rotAccX;
public static double rotAccY;
public static double rotAccZ;
public static List<Vertex> Geometry;
}
方法2
public static class TheSomething {
private static TheSomething _instance;
public static Instance {
get {
if(_instance == null)
_instance = new TheSomething();
} private set {
_instance = value;
}
}
private TheSomething() {}
public String Title;
public String Description;
public String HowIsIt;
public int TimesSeenCount;
public List<Long> PeopleWhoSawIt;
public List<Session> PeopleSeeingIt;
// now some math mumbo jumbo just to increase the memsize of this:
public double posX;
public double posY
public double posZ;
public double velX;
public double velY;
public double velZ;
public double accX;
public double accY;
public double accZ;
public double rotX;
public double rotY;
public double rotZ;
public double rotVelX;
public double rotVelY;
public double rotVelZ;
public double rotAccX;
public double rotAccY;
public double rotAccZ;
public List<Vertex> Geometry;
}
就性能而言,这两个选项都不会为您带来实质性的改进。它们属于微观优化的范围,在现实场景中不会产生太大(如果有的话)差异 从设计角度来看,这两种选择都很糟糕,第一种选择尤其糟糕。一般来说,单例模式是不受欢迎的,因为开发人员倾向于滥用和忽略与之相关的各种副作用,如保留内存或资源或缺乏多线程支持
如果您仍然需要该类的单个实例,请尝试使用依赖项注入容器,而不是将该类本身设计为单个实例。这是一个非常复杂的问题,我的答案将重复比我聪明的人已经说过的话。请阅读SO champion Jon Skeet的这篇文章。只有在与实际场景类似的现实条件下运行有效的性能测试,您才能回答“是否更快”。您的示例没有多大意义(增加
List
?)的一个实例),但如果有什么不同的话,我希望静态类比singleton更快(可能是一些无关紧要的,甚至是不可测量的数量)。充其量,这里的问题过于宽泛,最坏的情况下,没有足够的信息让任何人回答你的特定场景。是的,我最终需要一些类来“只执行一些东西”或“只存储这一条全球使用的信息”,比如System。例如,Convert,但我可能还需要在这些类中存储一些值,以便这两个示例都适合于此目的。假设没有性能差异,那么我会假设第一个模型(通常甚至由框架本身使用)似乎更适合。并同意我看不到使用singleton的好理由。谢谢你的信息,期待依赖注入模式。
public static class TheSomething {
private static TheSomething _instance;
public static Instance {
get {
if(_instance == null)
_instance = new TheSomething();
} private set {
_instance = value;
}
}
private TheSomething() {}
public String Title;
public String Description;
public String HowIsIt;
public int TimesSeenCount;
public List<Long> PeopleWhoSawIt;
public List<Session> PeopleSeeingIt;
// now some math mumbo jumbo just to increase the memsize of this:
public double posX;
public double posY
public double posZ;
public double velX;
public double velY;
public double velZ;
public double accX;
public double accY;
public double accZ;
public double rotX;
public double rotY;
public double rotZ;
public double rotVelX;
public double rotVelY;
public double rotVelZ;
public double rotAccX;
public double rotAccY;
public double rotAccZ;
public List<Vertex> Geometry;
}
++TheSomething.Instance.PeopleWhoSawIt;