【发布时间】:2014-02-10 17:21:48
【问题描述】:
这是我的类中继承自List(Of T) 的相关部分的摘录。查看SelectedObjects 和SelectedCount 属性。出于性能原因,我添加了SelectedCount,但现在想知道它是否比SelectedObjects.Count() 更好。
Public Class DrawingObjectsList
Inherits List(Of DrawingObjectBase)
Friend ReadOnly Property DOsOfCurrentFace As IEnumerable(Of DrawingObjectBase)
Get
Return Me.Where(Function(DObj) DObj.Face = mFace)
End Get
End Property
Public ReadOnly Property SelectedObjects() As IEnumerable(Of DrawingObjectBase)
Get
Return DOsOfCurrentFace.Where(Function(DObj) DObj.IsSelected = True)
End Get
End Property
Public ReadOnly Property SelectedCount() As Integer
Get
Return DOsOfCurrentFace.Count(Function(DObj) DObj.IsSelected = True)
End Get
End Property
End Class
我的理论是Where(predicate).Count() 和Count(predicate) 都需要迭代列表,因此不应该有任何显着差异。另外,由于我没有在Where() 上执行任何ToList() 或ToArray(),我不确定在其上调用Count() 是否能够利用内置的Count 属性。
那么我应该保留还是删除SelectedCount 属性?
【问题讨论】:
-
如果您想出于性能原因做某事是否值得,有一个显而易见的方法可以找出:衡量它。
-
@JonSkeet:正确,但我也想让专业人士评估我的理论。
-
那么您为什么不现在进行测量,并将其添加到问题中......以及尝试计算
Count所花费的时间实际上在您的应用中非常重要。
标签: vb.net performance linq list