我正在维护一组代码,该代码具有SqlDataAdapter的包装类以加载System.Data.DataTable。它有一个通用函数来确定DataTable是否具有“hasRecords”。我知道这是一个小问题,但出于好奇......哪种方法更快?
现有:
Public ReadOnly Property hasRecords() As Boolean
Get
hasRecords = CBool((CBool(BOF = True) And CBool(EOF = True)) = False)
End Get
End Property
或 可能是新的:
Public ReadOnly Property hasRecords() As Boolean
Get
hasRecords = IIf(RecordCount > 0, True, False)
End Get
End Property
如果将RecordCount定义为记录集属性中的固定值,我认为计数会比单个eval与它正在使用的多部分转换/ eval BOF / EOF方法更快。
还有其他理由不改变吗?
答案 0 :(得分:1)
这似乎是一种不必要且具有潜在风险的优化; RecordCount可能并不总是可用(请参阅documentation),而BOF和EOF应始终返回适当的答案。因此,您的优化可能会破坏行为,同时可能只提供最小的性能回报(如果您真的感兴趣,则应该进行测试)。
答案 1 :(得分:0)
就所涉算术而言,
hasRecords = Not(BOF AndAlso EOF)
与
hasRecords = (RecordCount > 0)
看起来RecordCount测试可能会减少努力。然而,这将是一个天真的结论。你需要自己做时间,看看是否有任何区别。我的大胆猜测:在今天的现代CPU - 通过流水线,分支预测和其他先进技术 - 可能没有可衡量的差异。