我的应用程序连接到oracle 10g。因为要获取的行数非常大,所以在获取时会消耗大量时间。如何改进数据窗口的获取操作。在搜索的过程中,我找到了一些" block"要在数据库配置文件中设置但不确定的参数。
答案 0 :(得分:2)
首先,确定您是否确实需要检索到客户端的所有行。如果该过程类似于“检索所有内容,然后在检索到的行中进行客户端计算”,我会考虑在服务器上的存储过程中执行所有这些处理。
您可以查看共享对象,并在后台线程中执行检索。
将检索到的列数限制为您真正需要的列数。 “从表中选择*”总是一个坏主意...
“按需查找”可能有所帮助,但仅当用户在线“遍历”行时才会这样做。如果这是一个大型报告,那么这个选项不会给你带来任何好处。
最终,每当“检索到大量行”时,您真的应该坐下来询问是否所有这些数据都需要进入客户端应用程序。
-Paul Horan -
答案 1 :(得分:0)
异步检索
如果必须检索这么多行,则通过dbparm属性将数据库操作设置为异步。这样做的唯一方法是释放GUI,从而产生更好性能的幻觉。异步无效的一件事是发送查询和返回的第一行之间的时间,GUI将被锁定(沙漏),直到检索到第一行,之后async将允许GUI为非沙漏。尽管您可能在其他地方遇到了交易问题,但请考虑使用其他交易对象。
datawindow对象sqlpreview事件中没有代码
除非绝对必要,否则永远不要在sqlpreview中放置代码,甚至是注释,因为它对每行运行一次,并且在检索大量行时可能会显着减慢检索速度。
缓存下拉数据窗口数据或任何半静态数据(如果可能)
如果你有大量行下载数据窗口,它会对性能产生很大影响,特别是对于很多行。如果数据是静态的,您可以将其缓存在内存中,然后使用datawindow getChild函数结合shareData函数手动将数据分配到下拉数据窗口。
以分隔格式检索数据
除了PowerBuilder编程的正常范例或任何编程之外,这个建议真的“在那里”。如果数据和接口允许您可能使用存储过程来返回大块中的数据,则基本上是分隔的数据,您将把行导入数据窗口。这是我在我15年的PB编程中从未见过的事情,但它可以在一些情况下工作。在检索大量行时会产生大量的通信开销,因此可以最大限度地减少开销,从而有利于服务器强力/速度和快速导入行功能。
我同意Paul的回答,特别是限制了列数,因为它可以大大减少检索的大小。阻止大小设置可能有助于提高性能,但可能并不多。