【问题标题】:Performance Issues Using TUniTable使用 TUniTable 的性能问题
【发布时间】:2012-01-31 01:21:39
【问题描述】:

我正在将 Paradox 数据库应用程序转换为使用 SQL Server 2008 R2 编写的 Delphi 数据库应用程序。我们正在使用 Devart 的 UNIDAC 组件来访问数据库/表。但是,我发现性能相当缓慢。例如,在 Paradox 版本中,当它打开具有 100,000 条记录的表(使用 TTable)时或多或少是即时的,但 SQL Server(使用 TUniTable)大约需要 2 秒。现在我知道这看起来并不多,但是在创建表单时打开了 10 个 TUniTable 数据集,所有这些数据集都包含大约相同数量的记录,因此目前打开它们只需不到 20 秒。有人有任何性能提示吗?

我使用的是 Delphi 2007

【问题讨论】:

  • 这与 UniDAC 无关。您应该从不对 SQL 数据库使用表类型访问;这意味着(对于几乎所有服务器),100% 的数据被传输到客户端。您应该改用查询,并使用特定的列列表和减少行数的 WHERE 子句来限制要检索的数据。

标签: delphi sql-server-2008 delphi-2007 devart unidac


【解决方案1】:

恕我直言,UniDAC TUniTable 只是 TUniQuery 的包装。 TUniTable open 可能会导致获取 SQL Server 上的所有记录。不确定如何,但尝试更改 SQL Server 游标类型和/或位置。

如果不晚,那就考虑使用AnyDACTADTable。它使用“实时数据窗口”技术,允许打开和浏览大表而没有明显的延迟,例如OpenLast 调用总是很快的。我们将几个 BDE 应用程序迁移到 AnyDAC 和 Firebird,TADTable 工作得非常好。

【讨论】:

  • Ken White 的警告对于 AnyDAC 仍然有效,查询(以 SQL 为中心)的性能将优于表(主要推荐用于桌面数据库)。
猜你喜欢
  • 2017-12-10
  • 2014-06-24
  • 2018-03-01
  • 2015-12-13
  • 2022-01-04
  • 2021-02-08
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多