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