TStringGrid的性能差

6

我有一个包含10列的TStringGrid。向其中添加500行需要约2秒钟的时间。这种性能表现正常吗?

对我来说,这似乎有点慢。

我从数据库查询中获取数据。如果我循环遍历查询结果但不将结果写入StringGrid,则该过程大约需要100毫秒,因此不是数据库拖慢了速度。

一旦添加了行,StringGrid的性能就很好。

这是我正在使用的代码:

Grid.RowCount := Query.RecordCount;
J := 0;

while not Query.EOF do
begin
    Grid.Cells[0,J]:=Query.FieldByName('Value1').AsString;
    Grid.Cells[1,J]:=Query.FieldByName('Value2').AsString;
    Grid.Cells[2,J]:=Query.FieldByName('Value3').AsString;
    // etc for other columns.
    Inc(J);
    Query.Next();
end;

实际代码要复杂一些(表格列与查询列并不完全对应),但这是基本思路。


没有代码,这个问题是无法回答的。"不,这不正常"是可以接受的,"是的,它是"也可以,"可能 - 这取决于"也可以。你是自定义绘制网格,还是使用默认绘制?发布你用来填充网格的代码,也许有人可以帮忙。 - Ken White
TListView可能是更好的控件选择。 - David Heffernan
我已经添加了一些示例代码。网格只是一个标准的TStringGrid;没有自定义绘图。 - awmross
FieldByName 反复调用会很慢且毫无意义。 - Premature Optimization
你为什么不使用一个数据库感知的网格控件呢? - Warren P
@WarrenP 不确定。我没有写这段代码。 - awmross
11个回答

0
在我的情况下,调试版本编译速度很慢,而发布版本编译速度很快 - 这是一个 Heisenbug。
更具体地说,FastMM4 FullDebugMode 触发了这种缓慢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接