使用 DataConnection 和 TypedDataTable

在许多情况下,与使用 TypedDataTable 相比,使用 DataConnection 可提供更好的性能并消耗更少的内存。 但是,在某些情况下,由于使用 DataConnection 的某些限制,可能需要 TypedDataTable。 在其他一些情况下,使用 TypedDataTable 可能会产生比使用 DataConnection 更好的性能。 本主题介绍了在选择正确的方法时应考虑的条件和因素。

何时使用 TypedDataTable 而不是 DataConnection

在以下情况下使用 TypedDataTable 而不是 DataConnection:

  • 需要更改数据,但表没有主键。 若要使用 DataConnection 进行数据更改,需要主键。 因此,如果没有主键, TypedDataTable 是唯一可行的方法。

    注意

    规则引擎仅更新 TypedDataTable 的内存中的值。 是否永久保存更改由调用方决定。

  • 选择性很高,这意味着,表中大部分行都将通过按规则条件指定的测试。 在这种情况下, DataConnection 没有提供太多好处,并且其性能可能比 TypedDataTable 更差。

  • 表非常小,通常包含的行数少于 500 行。 请注意,此数目可大可小,具体数值由规则形状和可用于规则引擎的内存来决定。

  • 在规则集中预计存在规则链接行为。 不支持在 DataConnection 上调用 Update 函数,但你可以使用帮助程序方法在规则中调用 DataConnection.Update。 当需要规则链接时, TypedDataTable 是更好的选择。

  • 表中一个或多个列包含大量规则不需要的数据。 例如,图像数据库。图像数据库中的各列包含图像(大量数据)、名称、日期等信息。 如果不需要图像,则最好只选择规则所需的列。 例如,发出“SELECT Name,Date from TABLE”之类的查询比使用 DataConnection 更高效。

  • 如果许多规则需要使用 TypedDataTable 更新同一数据库行,则所有规则之间共享该行,如果条件 (相同,例如 Table.Column == 5) ,则可以优化条件评估。 通常,使用 DataConnection 时,会为每个使用 DataConnection 的规则生成查询。 尽管行是重复使用的(如果表具有主键),但仍需要生成多个查询,每次都获取相同的数据。

何时使用 DataConnection 而不是 TypedDataTable

在以下情况下使用 DataConnection 而不是 TypedDataTable:

  • 表中包含大量行,但选择性很低;也就是说,只有少数行满足规则条件。

  • 只有一个数据库表很大;在规则中使用的其他所有对象都具有数量很少的实例。 在最差的情况下,对数据库执行的查询数等于在规则中使用的其他所有实例的乘积。

  • 规则仅由连接条件构成,并且在这些规则中使用非数据库表的对象。

另请参阅

业务规则引擎中的数据访问