我刚刚看了Firemonkey的网格实现,结果是它是一个非常简单的实现(只有1800行,对于网格实现来说似乎并不多).它几乎没有自定义绘画,而是聚合了很多其他控件 – 这似乎是Firemonkey的做事风格.
例如,每列保留一组控件 – 每个单元格一个.对于具有1,000,000行的正常文本列,网格将在内存中保留1,000个编辑控件 – 对我来说似乎有点疯狂. (编辑:如果这个假设是正确的,现在不太确定,似乎考虑到单元格的可见性,这可能意味着它提供了类似虚拟模式的东西,但我不太确定…)
我的问题:毫无疑问,Firemonkey的这个组件集合设计似乎简单而优雅,但是它的真实性是否会随网格中显示的数据量而变得很好?我无法想象它的行列表现很好. Firemonkey处理大量数据的方式是什么?
感谢任何投入.
解决方法
FireMonkey网格仅对可见线数量进行控制.
所以如果你有一个具有10个可见行和3列的网格,它将创建30个单元格控件.
使用10.000个记录填充网格是没有问题的:当您滚动30个单元格控件被重用并映射到新的可见行.
所以如果你有一个具有10个可见行和3列的网格,它将创建30个单元格控件.
使用10.000个记录填充网格是没有问题的:当您滚动30个单元格控件被重用并映射到新的可见行.
是的,我做了一些测试,因为我们有TMS网格与100.000记录:-).
如果您使用OnGetCellText(所以不是TStringgrid,这是非常慢的很多记录,特别是TMS网格(基于VCL stringgrid)),它非常快(OnGetCellText只检索可见单元格的数据).我们使用这种技术结合我们的数据对象(这些已经被加载,所以不需要再次用字符串值填充网格的每个单元格…),并且TMS和FMX网格都非常快,有100.000条记录或更多!