【发布时间】:2011-08-28 13:54:21
【问题描述】:
我在本机 C++ (Visual C++ 2010) 中有一些代码来处理一些 GB 的文件。我将其编译为 .exe,大约需要 8 分钟。但是我需要从 Visual Basic .net 接口调用它,所以我把它放在一个 .dll 中并创建了一个 c++/cli 包装类来调用我在本机 dll 中的代码。托管代码和本机 dll 之间的唯一交互是调用启动处理的函数。令我惊讶的是,处理所需的时间几乎是 .exe 方式的两倍。我不是真正的 VB.net 专家,所以也许有一些设置或一些我不知道的东西要看。欢迎任何想法。提前致谢。
【问题讨论】:
-
您的代码中正在发生什么样的处理?您的 exe 文件是否需要 100% 的处理器时间,还是需要大量的文件 I/O?
-
您是否将本机 C++ 代码放入 lib 或 DLL 中,并确保它与您的本机 exe / .NET 包装器中使用的 lib 完全相同?这是您应该首先尝试的。
-
处理大文件的代码几乎总是受到文件系统的限制。读取数千兆字节的文件需要一段时间,硬盘非常慢。重要的是文件之前是否被读取并因此缓存在文件系统缓存中,是否有足够的空闲 RAM 允许文件放入缓存以及文件碎片的严重程度。唯一安全的比较方法是使用 same 文件并从冷启动运行计时测试。
-
代码读取文件,处理信息,创建几个临时文件,创建一些图像,然后完成。处理器以 50% 的速度运行,而在 .exe 模式下则低于 30%。
-
@Daniel:您确定在创建 .NET 包装器时最终没有将 C++ 代码编译为托管代码吗?或者您没有为 .NET 版本使用未优化的调试版本?
标签: .net c++ vb.net dll c++-cli