通过从 msvcrt.dll
导入 memcmp
函数,在 .Net 中比较两个字节数组的效率众所周知,如 here 所述.
在单声道中是否有等效的库导入?在 Linux 或 Windows 上运行单声道时是否需要有所不同?或者是否有另一种在单声道中运行良好的快速字节数组比较技术?我正在寻找比在 C# 中遍历数组更好的东西。
更新
根据 Matt Patenaude 的评论,我认为这可能很有效:
#if __MonoCS__
[DllImport("c", CallingConvention = CallingConvention.Cdecl)]
#else
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
#endif
public static extern int memcmp(byte[] b1, byte[] b2, UIntPtr count);
不过我还没试过。我以前从未在单声道上做过 p/invoke。我正在使用 pinvoke.net 上推荐的签名.这会兼容吗?
寻找以单色为主的答案。谢谢。
最佳答案
根据您的更新,您不应使用 __MonoCS__
预处理器。这意味着您必须为 Mono 和 .NET 重新编译库。更好的方法是在 Mono 中使用 dllmap
功能,并且只使用 msvcrt.dll
DllImport。
而是定义一个“AssemblyName.dll.config”并使用 dllmap
标签在 Mono 上运行时将 msvcrt.dll
映射到 c
.
例子:
<configuration>
<dllmap dll="msvcrt.dll" target="libc.so.6" />
</configuration>
这里有更多关于 dllmap 的细节:http://www.mono-project.com/Config_DllMap
编辑
如果由于某种原因 c
不工作,libc.so
应该可以工作。
关于c# - 是否有一个 memcmp 等价物用于比较 Mono 中的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13923857/