abap性能调优

来源:互联网 发布:房天下端口销售 编辑:程序博客网 时间:2024/05/22 00:04

之前写的程序不管怎样都会有一个结果,但是昨天写的一个PP订单排产的程序,跑了一个半小时之后出现Runtime Errors         TSV_TNEW_BLOCKS_NO_ROLL_MEMORY。

Short text
    No roll storage space of length 1814536 available for internal storage.

 

关于什么是roll storage参考http://help.sap.com/saphelp_nw70/helpdata/en/28/d1d3f6bcb411d188b30000e83539c3/content.htm。

大意还是此程序把wp的内存耗尽了!对于此我有点不明白,我承认这个程序效率不是很高,我是这么写的:

loop itab into wa.

perform ..

perform ..

perform ..

perform ..

endloop.

循环内表,然后求每个字段的时候都用了一个perform。这样无疑加大了对数据库的负担,多次读取数据库。但是为什么会把内存耗尽了?调用了一个form之后难道没有释放掉内存吗?c的话调用完了一个函数会释放栈区的啊。为什么我的程序会把内存耗尽?

不过我的优化还是成功的,通过将数据一次性全部取出放进内标,取字段的时候全部read table,把对数据库的负担降低。优化完之后我在用se30测试,相同的数据情况下,最长的一次只用了62秒。之前的程序最不明白的地方还是sap的内存管理机制,为什么会把内存耗尽。