2

我需要在 InventTrans 上循环以累积某些日期的 itemId 数量,并使用该临时表作为数据源以表格形式填充临时表。我使用了一个类,并且 itemId 的过程很长(大约 5-10 秒)。

哪个代码最快?

  1. 使用执行该过程的类
  2. 临时表上的方法
  3. 使用调用者表单上的按钮 clicked() 处理

如何改进我的代码?

4

1 回答 1

6

由于您没有显示您的代码,因此对其进行改进纯粹是推测性的。

我会完全排除第 3 个;将业务逻辑放在单击的方法中不是一种选择。

需要考虑的事项:

  • 客户端/服务器:更喜欢将逻辑和数据访问放在服务器端,server在表方法或类静态方法上使用关键字(或使用类属性)。避免回调客户端获取参数等。
  • 数据访问:考虑索引使用,在选择中使用字段列表等。
  • 事务:在主循环外使用 ttsbegin/ttscommit,即使是临时表也可以加快磁盘访问速度。
  • TempDB 表:在 AX 2012 中,考虑使用填充了insert_recordset.
  • 如果可能,请避免使用临时表:在您的情况下,该InventSum表可能已经为您准备好了数据。在 select 中使用关键字,在tablesum上结合 join 。InventDim考虑做一个艰苦的工作。这将使 SQL 服务器进行计算,这通常会导致性能提高两位数。

长查询?在您的用户设置中启用长查询的 SQL 日志记录。

时间花在什么地方?使用代码分析器。

于 2012-10-01T10:48:07.700 回答