以前用C++写了个程序,现在需要在C#下使用这个DLL.我用了一个C#包装类包装了老的C++代码.
现在使用起来功能正常,但是速度极其缓慢,以前执行一次大概需要几十秒,现在要几十分钟.
因为原程序计算量很大,所以开了个线程跑,线程执行期间和UI部分没有交互,UI部分也没有额外的用户操作.请高手指教,问题出在什么地方了?如何解决?
谢谢!

解决方案 »

  1.   

    C++ => C++/CLI => C#
    中间加一层C++/CLI实现的代码,具体的计算还是由C++代码实现,相信会有很大改善.
      

  2.   

    首先要确保原C++程序没有问题,拿出来在相当数据量下测试,如果比.net快一个数量级,那可以考虑不用.net开发了.不过这种可能性很小.
      

  3.   

    楼主这种问题不是C# Interop的正常现象, 请先确信你写的代码没有问题. 包括内存操作!
      

  4.   

    多次调用非.NET的模块 中间有曾封装 对你透明的 所以很慢  不是直接调用的 是间接调用的
    没啥解决方案....把少调用就会快 把选环写在DLL里面就可以快点
      

  5.   

    LZ本来就是用的C++~他不是只是包装了层被调用么?
      

  6.   

    不好意思,原帖笔误了,包装后的执行时间不是几十分钟,是几分钟.大致比包装前的执行时间多了十几倍.
    调用的流程大体是这样的,先通过几个接口进行参数的设置,再调用运行接口进行计算,之后在运算结束前dll和UI部分不再有任何交互.
      

  7.   

    在Release版本上速度一切正常,看来是在调试过程中的Visual stduio记录封装了的C++模块信息的引起的问题.