可以做些什么来加快从托管代码调用本地方法?优化托管为本地调用
我正在编写一个程序,它需要能够管理任意大小的对象列表并从它们中高速检索信息,并将其提供给脚本。脚本是已编译的C#代码的一部分。我正在编写一个从C++(native)DLL/SO/etc等到C#(.Net或Mono)管理层的基本接口层。
现在,我一直在做一些测试,并且我发现平均而言,从托管代码中PInvoking本地方法比在托管代码中执行所有操作要慢100倍(所有本机和所有托管方式都是相同的速度快,供参考)。
我所用的语法是:
[DllImport("test.dll")]
extern static public String test_method(String value);
String returnedValue = test_method("hello world");
有没有办法缓存的指针功能,快速调用的一些代码,这将加载本地库后提高速度?这将很好地解决问题,所以我怀疑它存在。 :P
编辑:我没有指定,但是这需要在Windows,Linux(至少Ubuntu)和Mac OS X上工作,所有这些都适用于x86和x64。否则,我会用C++/CLI接口去完成它,但除非它适用于所有3个平台,否则我无法使用它。
也许有一些字符串和字符集转换发生,这会降低速度。如果您使用即时测量功能,您是否会获得类似的性能比率int而不是字符串? – x4u 2010-07-29 02:01:14
我的意思不是说明显,但我会因为100x似乎不符合我的经验,但是您没有运行调试版本\和/或在对.Net代码进行性能测试时附加了调试器? – 2010-07-29 02:15:48
@chibacity:这确实是一个带有调试器的调试版本。虽然所有组件,本地和托管,都是用调试器进行调试。我将再次使用发布版本运行我的编号并检查差异。 – ssube 2010-07-29 03:12:47