【问题标题】:devexpress xtratreelist poor performancedevexpress xtratreelist 性能不佳
【发布时间】:2013-01-21 20:57:33
【问题描述】:

我在表单上有一个简单的 xtratreelist,我有一个包含 846 行的简单 firebird 数据表。我从数据库中选择 5 列并填充树列表。

代码如下:

ConnectToDb(fbconn, CEGNEV)
    fbcommand.Connection = fbconn
    fbcommand.CommandText = "select szamlaszam, szamlanev, szamlacsop, szamlatip, szamlakat from szamlatukor order by szamlaszam"
    fbadapter.SelectCommand = fbcommand
    fbadapter.Fill(fbdataset)
    fbdataset.Tables(0).TableName = "szamlatukor"
    trlSzamlatukor.DataMember = "szamlatukor"
    trlSzamlatukor.DataSource = fbdataset
    trlSzamlatukor.ParentFieldName = "szamlaszam"
    trlSzamlatukor.PopulateColumns()
    fbconn.Close()

填充树列表需要 18 秒!这很慢,非常慢。

我也添加了一个 xtragridcontrol 并使用同一个表填充它。它发生在鼠标点击的时候。

树列表性能不佳的原因可能是什么?

【问题讨论】:

  • 下面的答案有帮助吗?你有没有进步,你尝试了什么?你能查明人口缓慢的来源吗?我认为如果有人试图帮助你,你能有礼貌地回复你,这将有助于你的声誉。

标签: performance xtratreelist


【解决方案1】:

尝试这个避免即时视觉更新的目的是什么?

trlSzamlatukor.BeginUpdate()
trlSzamlatukor.PopulateColumns()
trlSzamlatukor.EndUpdate()

【讨论】:

  • 因为我已经给出了这个答案:同时我了解到 BeginUpdate 对 PopulateColumns() 没有任何影响。当我进行一些简单的测量时,我可以认识到 XtraTreeList 的 PopulateColumns() 在项目数方面具有 O(n*n) 依赖性。但是,对于仅 845 个项目,它比 18s 好得多,例如10000 个项目大约 800 毫秒(然后 40000 个项目已经 13500 毫秒)。但我没有使用数据集,只使用数据表。 1) 使用 DataTable.Rows.Add 2) 在 SQL Server Express 中使用真实表。结果几乎相同。