RecordCount与BOF / EOF评估

时间:2011-05-12 16:01:19

标签: asp.net vb.net performance visual-studio-2008

我正在维护一组代码,该代码具有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方法更快。

还有其他理由不改变吗?

2 个答案:

答案 0 :(得分:1)

这似乎是一种不必要且具有潜在风险的优化; RecordCount可能并不总是可用(请参阅documentation),而BOF和EOF应始终返回适当的答案。因此,您的优化可能会破坏行为,同时可能只提供最小的性能回报(如果您真的感兴趣,则应该进行测试)。

答案 1 :(得分:0)

就所涉算术而言,

hasRecords = Not(BOF AndAlso EOF)

hasRecords = (RecordCount > 0)

看起来RecordCount测试可能会减少努力。然而,这将是一个天真的结论。你需要自己做时间,看看是否有任何区别。我的大胆猜测:在今天的现代CPU - 通过流水线,分支预测和其他先进技术 - 可能没有可衡量的差异。


顺便说一下,虽然你可能对RecordCount很好,但我发现BOF / EOF更加便携。只是说'。