使用 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:
表中包含大量行,但选择性很低;也就是说,只有少数行满足规则条件。
只有一个数据库表很大;在规则中使用的其他所有对象都具有数量很少的实例。 在最差的情况下,对数据库执行的查询数等于在规则中使用的其他所有实例的乘积。
规则仅由连接条件构成,并且在这些规则中使用非数据库表的对象。