gpt4 book ai didi

c++ - 将非托管 C++ 代码转换为托管 C++ 以便从 C# 调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:46 24 4
gpt4 key购买 nike

我有一些需要大量二进制操作的 C# 代码,因此我编写了一个非托管 C++ 方法来替换其中一个 C# 方法。令我震惊的是,速度慢了 10 倍。我运行了一个配置文件,发现缓慢来自于调用外部方法的开销,而不是方法本身。

所以我想,如果我在托管 C++ 中编写方法,我将减少调用的开销,但仍具有 C++ 的速度。首先,这个假设是否成立?

这是我的非托管 C++ 代码:

#include "stdafx.h";

unsigned __int32 _stdcall LSB_i32(unsigned __int32 x)
{
DWORD result;
_BitScanForward(&result, x);
return (unsigned __int32)result;
}

这是我的 C# 代码:

public static partial class Binary
{
[DllImport(@"CPP.dll")]
public static extern int LSB_i32(int value);
}

我是不是做错了什么?

如何将上述内容转换为托管 C++?我对此进行了一些浏览,但由于我不熟悉托管 C++,所以我没有深入了解。

最佳答案

您可以保留非托管方法,但不应经常从托管代码中调用它。例如,如果您在紧密循环中调用非托管方法,那么托管代码和非托管代码之间的编码开销将是巨大的。因此,您可以尝试将此循环放在非托管代码中,以便您只执行一次对该方法的调用。然后您只需支付一次编码费用,整个繁重的工作将在非托管代码中完成。

就将其转换为托管 C++ 而言,我非常怀疑这会给您带来比开始时更好的东西(即完全托管的 C# 代码)。

关于c++ - 将非托管 C++ 代码转换为托管 C++ 以便从 C# 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8628985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com