为什么刷新后执行查询要多花 100 倍的时间?

Why executeQuery after refresh takes 100x more time?

我有一个包含 4 个数据源的表单。它采用列表页样式,并在网格中显示 Datasource1(具有大量关系、列和索引的大 table)。当我打开此表单时,打开它需要 200 毫秒,但当我刷新它时,它需要 13 秒才能刷新。

我使用了代码分析器工具,我发现在executeQuery()方法中Datasource1中的时间被命令super();

executeQuery()

从表单调用时
Datasource1_ds.executeQuery();

调用需要200ms。

表单的网格中有大约 15 列,按一列排序需要不到 1 秒。

所以我的问题是。当任务 F5 刷新表单而不是打开表单并调用 Datasource1_ds.executeQuery();[=36 时在 super(); 中调用的内容=]?

我尝试使用具有不同设置和操作的代码探查器,在完成的各种操作中调试代码,使用 Visual Studio 探查器,使用 Activity Microsoft 中的监视器 SQL Microsoft 上的服务器Dynamics AX 数据库,更改 Datasource1 table,没有成功。

每次我最终进入 super(); 只有当我在网格上有过滤器并且它显示的行数较少时,刷新速度才会快。 (我尝试在网格上使用 VisibleRows 属性 但它没有帮助。)

我正在使用 Microsoft Dynamics AX 2012 R2

我建议使用 SQL Server Profiler 捕获执行的查询 (1) 在初始 executeQuery() 打开 ListPage 表单时,然后 (2) 在调用 executeQuery()在表单刷新。

比较这两个查询的执行计划一定能看出瓶颈。您可以捕获 Showplan XML 事件。