c# - 是否有一个 memcmp 等价物用于比较 Mono 中的字节数组?

标签 c# c mono bytearray memcmp

通过从 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/

相关文章:

c++ - 在 C++ 中,自定义头文件是可选的吗?

c - 如何在C中的冒泡排序函数中保留while循环

c# - 如何避免复制/粘贴许多事件处理程序

c# - 如何调试从 C# 执行的 powershell 脚本?

c# - 做一个asp :TextBox inside a Repeater fire the Repeater's ItemCommand when Enter pressed

android - Unity 中的 native Android 库抛出 DllNotFound 异常

.net - RabbitMQ DotNet 客户端不连接到 SSL

c# - 在计时器上刷新 Gridview 但保持扩展 div 的状态

php - 基于网络的编译器

mono - 在 Mono 中启用 Entity Framework 迁移