c# - N 个静态字段与单个静态实例

标签 c# static

我正在研究单例格式,它与我以前使用的非常相似。

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

示例代码:

方法一

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;

方法二

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;

最佳答案

就性能而言,这两种选择都不会给您带来实质性的改进。它们属于微优化范围,不会对现实场景产生太大影响(如果有的话)。

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

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

关于c# - N 个静态字段与单个静态实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134897/

相关文章:

c# - 使用C#访问Oracle DB时总是遇到ORA-00936缺少express

c# - ASP.NET 动态表单生成和提交

c# - 有没有办法使用 Microsoft Azure 认知服务 ComputerVision 获取图片中找到的对象的低置信度值?

c# - 判断一个字符串是否大于另一个字符串

python - 创建类的静态属性(属性是同一类的实例)

C#:导出到文本文件时,项目符号乱七八糟

c - 在定义中使用 static 关键字与在 C 中使用声明

java - 数组 "r"的值更新为 2?

c# - Asp.Net 刷新页面的静态方法

可以在另一个文件中使用 extern 访问静态声明的全局变量吗?