12

早上好,

我正在编写一个拼写检查器,对于这种情况,它对性能至关重要。也就是说,由于我打算连接到数据库并使用 C# 制作 GUI,所以我用 C 编写了一个编辑距离计算例程并编译成一个 DLL,我在 C# 中使用DllImport. 问题是我认为(尽管我可能错了)将单词从Stringto一个一个地编组char *会导致大量开销。也就是说,我考虑过使用 C++/CLI,以便我可以String直接使用 .NET 中的类型......我的问题是 C++/CLI 性能与本机 C 代码相比如何进行繁重的数学计算和数组访问?

非常感谢。

4

3 回答 3

4

C++/CLI 也必须进行某种编组。

像所有与性能相关的问题一样,您应该衡量和优化。您确定 C# 的速度不足以满足您的目的吗?不要低估 JIT 编译器要做的优化。不要仅仅为了在没有尝试的情况下进行管理而推测语言实现的开销。如果这还不够,在尝试非托管代码之前,您是否考虑过不安全的 C# 代码(带有指针)?

关于 C++/CLI 的性能配置文件,它实际上取决于它的使用方式。如果您使用 ( ) 编译为托管代码 (CIL) /clr:pure,它与 ​​C# 不会有太大不同。C++/CLI 中的本机 C++ 函数将具有与普通 C++ 相似的性能特征。在原生 C++ 和 CLI 环境之间传递对象会有一些开销。

于 2010-12-06T10:50:39.367 回答
1

I would not expect that the bottleneck will be with the DLLImport.
I have written programs which call DLLImport several hundert times per second and it just works fine.
You will pay a small performance fine, but the fine is small.

于 2010-12-06T11:04:04.037 回答
1

不要假设您知道需要优化什么。让采样告诉你。

我已经做了几个拼写校正器,我做的方式(在这里概述)是将字典组织为内存中的 trie,然后搜索它。如果单词的数量很大,可以通过共享公共后缀来大大减小 trie 的大小。

于 2010-12-06T13:20:04.587 回答