日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABAP performance学习笔记

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP performance学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
去年的時候進行了一下Performance的培訓,也實際動手對占用系統(tǒng)資源嚴重的程序進行了tuning,效果還不錯!我tuning的一個程序,在tuning以前需要跑20多個小時,tuning完成以后只需要3-4個小時就可以了,用戶很滿意,我很得意,哈哈!今天有空,所以就將一些ABAP tuning的方法記錄如下:

  一,盡量杜絕使用select...endselect的實用方法而使用internal table.

  二,Loop里面不要嵌套select.可以首先使用for all entry in的方法將select的內容放置到internal table中,然后對該table進行排序,最后在loop里面使用read table ....with key ...binary search的方法。(此方法有一個例外,在外層loop數(shù)據(jù)量大的情況下,如果loop里面嵌套的select每次只讀取出幾條數(shù)據(jù),而使用for all entry in的方法讀取出來的數(shù)據(jù)量十分龐大的時候,在使用read table binary seach的方法可能會造成內存不足從而dump的情況。該結論未經(jīng)證實。而是同事得出的結論:loop的內表中有100多萬條數(shù)據(jù),loop里面select時每次只讀出了幾條,而使用for all entry in的情況下則讀出了好幾百萬條的數(shù)據(jù),最后造成了內存不足的情況。我的意見:遇到該種情況可以實際動手對兩種情況進行一些測試比較)

  三,使用select讀取表數(shù)據(jù)的時候盡量使用主鍵或者index.如何判斷index是否有作用以后抽時間在講。

  四,避免Loop里面套Loop的方法或者是Loop里面嵌套delete table where ...。可以使用field symbols來解決該問題。這一招實際應用中非常有效果。具體如何實現(xiàn)請參考如下代碼:

LOOP?AT?itab.
????
DELETE?itab1?WHERE?matnr?=?itab-matnr?AND
????????????????????????vbeln?=?itab-vbeln?
AND
????????????????????????posnr?=?itab-posnr.

ENDLOOP.

Recommendation:

field-symbols <fs> like line of itab.
field-symbols <fs1> like line of itab1.
loop at itab assigning <fs>.
? read table itab1 transporting no fields binary search with
?????????????????????? ????????????????????key matnr = <fs>-matnr
???????????????????? ??????????????????????????vbeln = <fs>-vbeln

?????????????????????????????????????????????? posnr = <fs>-posnr.
? lf_from_index = sy-tabix.
? if sy-subrc eq 0.
??? loop at itab1 assigning <fs1> from lf_from_index.
????? if not ( <fs1>-matnr = <fs>- matnr and
<fs1>-vbeln = <fs>-vbeln and
?????????????? <fs1>-posnr = <fs>-posnr ).
??????? exit.
????? endif.
????? <delete>
??? endloop.
?endif.
endloop.

  五,使用for all entry in的時候切記兩點:使用DELETE ADJACENT DUPLICATES FROM刪除從表中的重復記錄,以及使用if not interanl table is initial判斷主表是否為空,只要在主表不為空的情況下才執(zhí)行。

  今天先記錄如下,沒有經(jīng)過整理的,憑著記憶寫的,以后再補充.

總結

以上是生活随笔為你收集整理的ABAP performance学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。