簡體   English   中英

調用多個單例實例

[英]Calling Multiple Singleton Instances

我有一個這樣的單身人士班

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

或者這更好(&為什么)

private void Method()
{
    Singleton singletoon = Singleton.Instance;
    singletoon.Username = "";
    singletoon.Password = "";
}
  1. ?? Instance屬性中的內容是沒有意義的,因為您之前初始化了基礎字段。

  2. 您不必擔心性能,JIT編譯器很可能會對其進行優化。

  3. 整個情況看起來像過早的優化。 您當前的代碼真的遇到問題了嗎?

更新資料

要回答評論中提出的問題:

我會去

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

但這不是因為性能,而是因為它更易於閱讀。

這種方法:

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

最好是因為您不在getter中執行if語句。

在這種情況下:

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

您兩次調用getter,因此使用if條件(在您的情況下以'??'表示)。

盡管性能差異確實很小 ,尤其是在您的情況下。

順便說一句,無論如何,您都是靜態地初始化Singleton _instance因此不需要在吸氣器中執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM