我非常喜欢abapoo中的返回参数,我认为它使ABAP代码更加一致和可读,请参阅https://www.cqse.eu/en/blog/coding abap like java/#keep-方法调用simple和consistent作为例子。
我尽可能地使用它,也用于深层结构和内部表。但是,标准SAP代码检查器检查"参数传递性能差"指出:
并且返回总是按值传递,这总是给出至少40%的性能损失!?而传递值将使用两倍的内存?
因为内存非常便宜,所以使用简化的代码来降低40%的性能是值得的吗?我写了一个简短的测试程序,它调用了两种方法:按引用传递和按值传递。代码可在https://github.com/larshp/return \u by \u value测试已经在750SP02上运行了。
返回/导出100次100万行(约1GB),平均值是:
使用返回似乎不会慢40%,大数据+,但与填充表所需的时间相比,40%的基数可能非常小,hmm
内存消耗
如果pass by value复制数据,则返回所需的内存消耗应该是导出所需的两倍。但是,在调试器中查看内存消耗时,返回的峰值与导出的峰值相同,但实际的内核中间内存峰值可能没有发送到内存分析工具。
让我们尝试处理一个500.000行(500mb)的内部表,并检查内存使用情况,
2个500mb内容的相同表只需要500mb,因为它们似乎共享相同的内存,大数据主要学什么,即只制作一个浅拷贝。修改表内容:
每个表占用500mb.
内部表共享
表共享的概念在月/A-Developers-Guide-To-Protecting-Memory-Detect-And-Eliminate-Damaging-Memory-Leaks-With-ABAP-Memory其中提到"表共享也会发生导入或导出时,参数按"值"传递,移动物联网卡,但不返回。
另见
https://help.sap.com/http.svc/rc/abapdocu\u 750\u index\u htm/7.50/en-US/abensharing\u glosry.htm
https://help.sap.com/http.svc/rc/abapdocu\u 750\u index\u htm/7.50/en-US/abentable\u sharing\u glosry.htm
这提供了一些额外的提示。
作为特殊情况表共享用于返回中的嵌套表,
结论
返回可用于传递大型内部表,如有疑问,可编写小型测试程序来测试假设或尝试运行标准SAP代码检查器检查"性能检查"->"参数传递性能差"。与ABAP中的其他内容一样,这里很可能有一些特殊的情况,好评返现文案,上面没有提到。
,有哪些云服务器