我有一个像这样的单身人士
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 = "";
}
答案 0 :(得分:4)
??
属性中的 Instance
毫无意义,因为您之前初始化了基础字段。
你不应该担心这里的性能,JIT编译器最有可能优化它。
整个案例看起来像是过早优化。您是否真的遇到过当前代码的问题?
的更新强> 的
回答评论中提出的问题:
我会选择
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
,所以没有必要在你的吸气器内做这件事。