第十七章 性能(三)
2007-05-08 11:43
344 查看
本文仅供AX从业者和爱好者讨论学习之用,由于原文版权问题请勿转载并期待您的指正.
接上文
这种方式比下面代码显示的一条条记录插入有很大的效率提升,它们达到的效果是一样的
static void CopySizes(Args _args)
public void insert()
static void CopySizes(Args _args)
static void UpdateSizes(Args _args)
static void UpdateSizes(Args _args)
static void DeleteSizes(Args _args)
static void DeleteSizes(Args _args)
{
InventSize inventSize;
;
ttsbegin;
while select forupdate inventSize
where inventSize.ItemId == 'PB-Metal Shade'
{
inventSize.delete();
}
ttscommit;
}
同样,由于只向数据库提交一条语句,比起逐条删除使用delete_from有很大的效率提升。
与insert_recordset和update_recordset类似,delete_from会因为类似的原因降级。如果满足如下条件中的一个则会发生降级:
1.表是全表缓存的;
2.目的表的delete,aosValidateDelete或者aosValidateRead方法被重载;
3.在目的表上配置了由删除触发的预警;
4.配置了数据库日志用于记录目的表的删除操作。
如果在表上定义了delete actions也会发生降级。DynamicsAX应用运行时会自动处理降级在内部执行与前面提到的while select 同样的操作。
可以避免由前面提到的功能引起的降级,除非采用了全表缓存。记录缓存(译注:表变量)包含关闭检测的方法,这些检测由应用运行时执行的用于决定delete_from操作是否应该被降级的.调用skipDataMethod(true)阻止检测update是否被重载,调用skipAosValidation(true)阻止检测aosValidateDelete和aosValidateRead方法。调用skipDatabaseLog(true)阻止检测数据库日志是否配置用来记录该表的删除操作,调用skipEvents(true)阻止检测是否在该表上配置了由删除事件触发的预警。调用skipDeleteActions(true)阻止检测是否在目的表的元数据上定义了delete actions。
正如前面提到的skip方法使用的描述,在降级发生的时候,对应的行为并不会被跳过(译注:原文可能是为了避免重复的语句太多换了个说法,作者想表达的意思跟前面是一样的),delete_from也可以使用update_recordset使用的并发模型。
注释:记录缓存(译注:表变量)也包含skipDeleteMethod方法。调用该方法跟调用skipDataMethods(true)方法的效果是一样的。它实际上触发了同样的DynamicsAX应用运行时逻辑,所以可以结合insert_recordset和update_recordset使用skipDeleteMethod方法,尽管这并不会提高X++代码的可读性(译注:那何必要加这么个方法那?)
接上文
这种方式比下面代码显示的一条条记录插入有很大的效率提升,它们达到的效果是一样的
static void CopySizes(Args _args)
public void insert()
static void CopySizes(Args _args)
static void UpdateSizes(Args _args)
static void UpdateSizes(Args _args)
static void DeleteSizes(Args _args)
static void DeleteSizes(Args _args)
{
InventSize inventSize;
;
ttsbegin;
while select forupdate inventSize
where inventSize.ItemId == 'PB-Metal Shade'
{
inventSize.delete();
}
ttscommit;
}
同样,由于只向数据库提交一条语句,比起逐条删除使用delete_from有很大的效率提升。
与insert_recordset和update_recordset类似,delete_from会因为类似的原因降级。如果满足如下条件中的一个则会发生降级:
1.表是全表缓存的;
2.目的表的delete,aosValidateDelete或者aosValidateRead方法被重载;
3.在目的表上配置了由删除触发的预警;
4.配置了数据库日志用于记录目的表的删除操作。
如果在表上定义了delete actions也会发生降级。DynamicsAX应用运行时会自动处理降级在内部执行与前面提到的while select 同样的操作。
可以避免由前面提到的功能引起的降级,除非采用了全表缓存。记录缓存(译注:表变量)包含关闭检测的方法,这些检测由应用运行时执行的用于决定delete_from操作是否应该被降级的.调用skipDataMethod(true)阻止检测update是否被重载,调用skipAosValidation(true)阻止检测aosValidateDelete和aosValidateRead方法。调用skipDatabaseLog(true)阻止检测数据库日志是否配置用来记录该表的删除操作,调用skipEvents(true)阻止检测是否在该表上配置了由删除事件触发的预警。调用skipDeleteActions(true)阻止检测是否在目的表的元数据上定义了delete actions。
正如前面提到的skip方法使用的描述,在降级发生的时候,对应的行为并不会被跳过(译注:原文可能是为了避免重复的语句太多换了个说法,作者想表达的意思跟前面是一样的),delete_from也可以使用update_recordset使用的并发模型。
注释:记录缓存(译注:表变量)也包含skipDeleteMethod方法。调用该方法跟调用skipDataMethods(true)方法的效果是一样的。它实际上触发了同样的DynamicsAX应用运行时逻辑,所以可以结合insert_recordset和update_recordset使用skipDeleteMethod方法,尽管这并不会提高X++代码的可读性(译注:那何必要加这么个方法那?)
相关文章推荐
- 第十七章 apache 性能调优
- 第十七章:性能(四)
- 第十七章 性能(二)
- 源码-Oracle数据库管理-第十七章-动态SQL语句-Part 5(动态SQL的性能优化技巧)
- 第十七章 性能(一)
- Re:架构设计之性能设计经验
- 反应路由协议性能的参数
- 网站性能测试webbench
- MySQL数据库性能优化六大技巧
- redis的一些性能测试,主要是keys和smembers
- MySQL数据库架构及性能优化实战简述
- web性能测试基本性能指标
- Android的性能实践
- Java程序性能优化
- 优化 SQL Server 查询性能
- 路由器测试的性能测试
- JAVA性能优化需要注意的26个地方
- SIP协议性能测试工具SIPp参数详解
- 软件测试之性能测试
- foreach真的比for性能高吗