调用多个单例实例

时间:2014-02-01 21:21:06

标签: c#

我有一个像这样的单身人士

class Singleton
{
    private static Singleton _instance = new Singleton();
    public string Username { get; set; }
    public string Password { get; set; }

    public static Singleton Instance
    {
        get { return _instance ?? (_instance = new Singleton()); }
    }
}

当像这样多次调用Singleton.Instance.X时,它是否会影响性能

private void Method()
{
    Singleton.Instance.Username = "";
    Singleton.Instance.Password = "";
}

或者这是更好的(& why)

private void Method()
{
    Singleton singletoon = Singleton.Instance;
    singletoon.Username = "";
    singletoon.Password = "";
}

2 个答案:

答案 0 :(得分:4)

    您在??属性中的
  1. Instance毫无意义,因为您之前初始化了基础字段。

  2. 你不应该担心这里的性能,JIT编译器最有可能优化它。

  3. 整个案例看起来像是过早优化。您是否真的遇到过当前代码的问题?

  4. 更新

    回答评论中提出的问题:

    我会选择

    private void Method()
    {
        Singleton singletoon = Singleton.Instance;
        singletoon.Username = "";
        singletoon.Password = "";
    }
    

    但不是因为表现,而是因为它更容易阅读。

答案 1 :(得分:2)

这种方法:

private void Method()
{
    Singleton singletoon = Singleton.Instance;
    singletoon.Username = "";
    singletoon.Password = "";
}

最好不要在getter中执行if语句。

在这种情况下:

private void Method()
{
    Singleton.Instance.Username = "";
    Singleton.Instance.Password = "";
}

你调用getter两次,所以if-condition(在你的情况下由'??'表示)。

虽然性能差异非常轻微,尤其是在您的方案中。

顺便说一句,无论如何你都要静态地宣传你的Singleton _instance,所以没有必要在你的吸气器内做这件事。