我一直在努力使一些代码更高效,现在我想知道哪种模式更高效。由于遗留原因,该解决方案在 VB.NET 和 C# 中都有代码。
我已经放入了我们拥有的两种方法的 VB 和 C# 版本。
这个想法是,如果Foo
属性被访问并且_foo
为空,那么它将被设置为一个新对象,并且任何后续请求都将访问同一个对象,而不是每次都创建一个新对象。
我知道编译器和 JIT 在引擎盖下做了一些聪明的事情,但我不确定哪种方式更有效。
选项 1:合并价值。Visual Studio 一直在推荐一些地方的合并,所以这让我觉得这个操作已经很优化了。但是,_foo
每次我们获得Foo
选项 2 时都会分配给:进行比较,_foo
然后null
仅_foo
在需要时分配给。
我敢肯定两者在速度上几乎没有任何区别,但我很好奇这些在低得多的水平上是如何处理的
Private _foo As List(Of Fubar)
Private _bar As String
Private _foo2 As List(Of Fubar)
Private _bar2 As String
Public Property Foo As List(Of Fubar)
Get
_foo = If(_foo, New List(Of Fubar))
Return _foo
End Get
Set (value As List(Of Fubar))
_foo = value
End Set
End Property
Public Property Bar As String
Get
_bar = If(_bar, String.Empty)
Return _bar
End Get
Set (value As String)
_bar = value
End Set
End Property
Public Property Foo2 As List(Of Fubar)
Get
If _foo2 Is Nothing Then _foo2 = New List(Of Fubar)
Return _foo2
End Get
Set (value As List(Of Fubar))
_foo2 = value
End Set
End Property
Public Property Bar2 As String
Get
If _bar2 Is Nothing Then _bar2 = String.Empty
Return _bar2
End Get
Set (value As String)
_bar2 = value
End Set
End Property
private List<Fubar> _foo;
private string _bar;
private List<Fubar> _foo2;
private string _bar2;
public List<Fubar> Foo
{
get
{
_foo = (_foo ?? new List<Fubar>());
return _foo;
}
set
{
_foo = value;
}
}
public string Bar
{
get
{
_bar = (_bar ?? string.Empty);
return _bar;
}
set
{
_bar = value;
}
}
public List<Fubar> Foo2
{
get
{
if (_foo2 == null) { _foo2 = new List<Fubar>(); }
return _foo2;
}
set
{
_foo2 = value;
}
}
public string Bar2
{
get
{
if (_bar2 == null) { _bar2 = string.Empty; }
return _bar2;
}
set
{
_bar2 = value;
}
}