【问题标题】:Profiler for a C++ module in a C# appC# 应用程序中 C++ 模块的探查器
【发布时间】:2010-12-07 13:49:27
【问题描述】:

我在我的项目中重写了从 C# 到非托管 C++ 的数字运算两页代码,经过全面优化后,速度提高了 3 倍。我想继续优化该代码,但现在我选择的分析器 dotTrace 无法做到,因为它只查看托管代码。

当 P/Invoked C++ 模块在 C# 应用程序中运行时,如何对其进行概要分析?


还有一个切题的问题: 通过 P/Invoke 调用以下函数不会产生任何不必要的开销(例如复制数组),对吧?只是确保。 (请注意,Foo 既从 bar 读取并写入它)

// From the C# side:
[DllImport("foo.dll")]
static extern void Foo(float[,] bar);

// From the C++ side:
extern "C" __declspec(dllexport)
void Foo(float* bar);

编译器:Vista 上的 msvc

【问题讨论】:

  • float[,] / float* 真的对吗? float[] / float*float[,] / float** 的相关性不是更好吗?
  • 没有。了解 float[,] 和 float[][] 之间的区别。
  • 我不知道,我不使用 C#。我会把它添加到我不知道的语言列表中:)

标签: c# c++ optimization pinvoke visual-c++


【解决方案1】:

AQtime 可以分析本机代码和托管代码。这是一个非常强大的工具。

【讨论】:

    【解决方案2】:

    如何为 C++ 代码制作一个独立的测试工具,并使用任意数量的工具(如 VTune、callgrind、Quantify、oprofile...)单独对其进行分析?

    【讨论】:

      【解决方案3】:

      Visual Studio 分析器适用于混合模式应用。 (不幸的是)很难在 VS 2008 中访问它,但它包含在 VS 2010 Ultimate beta 中,您可以免费下载here

      【讨论】:

        猜你喜欢
        • 2011-03-24
        • 2011-01-07
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多