gpt4 book ai didi

c++ - QSqlQueryModel 使用和性能

转载 作者:行者123 更新时间:2023-12-05 07:28:14 37 4
gpt4 key购买 nike

我有一个我维护的数据库的小型管理应用程序。我所关注的表中的记录永远不会超过 1000 到 1500 条,而且只有大约八列数据。我查看它的表单是 QTableView 的子类,我正在使用 QSqlQueryModel 来填充它。多年来,我一直在 MSSQL 所在的服务器上运行这个应用程序,性能还可以,但有点迟钝……没什么大不了的。我特别预取所有数据,因为我不介意启动时的小延迟,以便在那之后获得更好的 UI 性能。表中大约有 1300 条记录。

我不能很容易地发布代码,但它并不复杂。

我需要做一些改进,因此出于开发目的,我从我的开发机器上运行它,SQL Server 端口通过中间服务器建立隧道。因此,我预计速度会有所放缓,但隧道性能良好,应该不会太戏剧化。

但是……太可怕了,无法使用。我找不到关于 QSqlQueryModel 如何在内部工作的文档,但基于性能,它似乎是与数据库的实时连接,即使我已经预取了所有数据。我无法滚动表格;响应滚动条的一次移动可能需要 20 或 30 秒。我发现 resizeRowsToContents 需要几分钟。与 TableView 的每一次微不足道的交互似乎都会引发巨大的延迟,我只能将其归因于与服务器的大量意外来回。

我进行了很多搜索并尝试了一些实验。首先,我删除了所有调整大小的行和列以消除影响(但我希望它恢复原样)。我在预取上设置了一个计时器,发现我在大约 18 到 19 秒内获得了所有数据。 (在这种情况下这是可以接受的。)

我想也许我应该只查询数据并构建自己的模型,所以我使用 QSqlQuery 创建了一个查询来获取相同的数据并循环遍历所有记录。它花费了 90 秒到 3 分钟不等。我已经使用“准备”并将 setForwardOnly 设置为 true。没有参数,所以没有绑定(bind)。

多年来,我广泛使用 Qt,但没有太多使用它访问 SQL 数据库的经验。文档描述了函数,但似乎假定我知道幕后发生的事情,所以我只是猜测。

首先,我正在寻求更好地了解 QSqlQueryModel 在与数据库表保持最新(如果有的话)方面在幕后做了什么。其次,我正在寻找一种技术,可以用最快的方式简单地从表中获取所有数据。之后我可以处理其他所有事情。

最佳答案

我通过在对查询调用“准备”之前添加对“setForwardOnly (true)”的调用来解决我的性能问题。自从我处理这个问题以来已经有一段时间了,但我认为我在“准备”之后调用了“setForwardOnly”,但没有用。

我继续使用 QSqlQueryModel 而没有切换到任何替代解决方案,因为这种改变满足了我的需求。

关于c++ - QSqlQueryModel 使用和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530143/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com