N个静态字段与单个静态实例

时间:2015-05-09 01:04:33

标签: c# static

我正在研究单身格式,它与我之前使用过的东西非常相似。

我的问题是,这两种方法之间的内存和/或性能是否存在差异,第二种选择是否更快,足以掩盖其写入和读取的使用量更大?

以下是一个示例代码:

方法1

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;
}

用于:

++TheSomething.PeopleWhoSawIt;

方法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;
}

用于:

++TheSomething.Instance.PeopleWhoSawIt;

1 个答案:

答案 0 :(得分:1)

性能方面,这两种选择都不会为您提供实质性的改进。它们属于微观优化的范围,在现实世界的情景中不会产生太大的(如果有的话)差异。

从设计的角度来看,两种选择都非常糟糕,第一种选择特别邪恶。一般来说,单身模式是不受欢迎的,因为开发人员倾向于滥用和忽略与之相关的各种副作用,如保留内存或资源或缺乏多线程支持。

如果您仍然需要该类的单个实例,请尝试使用依赖注入容器,而不是将类本身设计为单例。