Performance 在ABAP中处理二进制数据

Performance 在ABAP中处理二进制数据,performance,cryptography,abap,Performance,Cryptography,Abap,我试图在ABAP中实现一些加密函数,但对二进制字符串上的低性能操作感到困惑 例如,我有一个X字符串(不是XString),我想在循环中一个字节接一个字节地读取它。我说: DO n TIMES. b = data+offset(1). ... 这是可行的,但读取速度约为1.5 MB/s。另一种操作,包括位加法、循环移位和模加法,也工作得很慢 因此,ABAP中的哈希速度大约为600 KB/s,而C/C++中的哈希速度大约为100 MB/s 我怀疑ABAP是否适合处理二进制数据。也许还有另一种处

我试图在ABAP中实现一些加密函数,但对二进制字符串上的低性能操作感到困惑

例如,我有一个X字符串(不是XString),我想在循环中一个字节接一个字节地读取它。我说:

DO n TIMES.
  b = data+offset(1).
...
这是可行的,但读取速度约为1.5 MB/s。另一种操作,包括位加法、循环移位和模加法,也工作得很慢

因此,ABAP中的哈希速度大约为600 KB/s,而C/C++中的哈希速度大约为100 MB/s


我怀疑ABAP是否适合处理二进制数据。也许还有另一种处理二进制数据的惯用方法;或者,除了将加密函数提取到(比如)C#或Java服务中之外别无选择。

正如所建议的那样,ABAP不一定是实现系统类型功能的最佳方式,这不仅是出于性能原因,而且是因为在ABAP中处理某些数据类型有时会非常笨拙


也许您可以在C中实现加密函数,然后通过RFC从ABAP与它们接口,让C应用程序充当RFC服务器,并通过RFC调用从ABAP调用它。您可以了解有关安装NetWeaver RFC SDK和编写RFC服务器的更多信息。

我想说,您的怀疑并非毫无根据。这不是ABAP设计的目的,这就是为什么SAP提供的大多数加密函数(您检查了这些函数以查看是否可以重用它们,对吗?:-)都是由内核函数提供的。是的,不幸的是,我需要SAP尚未实现的特定于国家/地区的加密。据我所知,用户不可能实现自己的内核函数(至少因为他们没有所需的C头的来源)。事实上,没有办法实现自己的内核函数(这些函数由
disp+work
可执行文件提供,不可修改).不久前,我在ABAP中实现了md5校验和算法,并面临相同的性能问题。看看这个。例如,看起来位操作是以某种方式在引擎盖下的字符串上实现的,因此非常非常慢。