通过从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.dlldllimport。
相反,定义一个“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应该起作用。

10-04 21:58
查看更多