通过从memcmp
导入msvcrt.dll
函数(如here所述),在.net中比较两个字节数组有一种众所周知的效率。
Mono中是否有等效的库导入?在Linux或Windows上运行Mono时需要有所不同吗?或者还有另一种快速字节数组比较技术可以在mono中很好地工作吗?我在寻找比在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);
但我还没有试过。我以前从未在mono上做过p/invoke。我正在使用pinvoke.net上推荐的签名。这会兼容吗?
寻找单声道聚焦的答案。谢谢。
最佳答案
根据您的更新,您不应该使用__MonoCS__
预处理器。这意味着您必须为mono和.net重新编译库。更好的方法是在mono中使用dllmap
功能,并且只使用msvcrt.dll
dllimport。
相反,定义一个“assemblyname.dll.config”,并在mono上运行时使用dllmap
标记将msvcrt.dll
映射到c
。
例子:
<configuration>
<dllmap dll="msvcrt.dll" target="libc.so.6" />
</configuration>
有关DLLMAP的更多详细信息,请点击:http://www.mono-project.com/Config_DllMap
编辑
如果由于某种原因
c
不起作用,libc.so
应该起作用。