您的位置:首页 > 其它

第十七章 性能(三)

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++代码的可读性(译注:那何必要加这么个方法那?)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: