c#和C结合的优点/缺点
本文关键字:缺点 结合 | 更新日期: 2023-09-27 18:11:31
我正在考虑开发使用c库来执行所有计算的Winforms应用程序。我想使用c#,因为用它开发GUI真的很容易,而且C可以提高性能。结合这两种语言还有其他的优点或缺点吗?
编辑:作为计算,我指的主要是(但不限于)图形算法,如着色,dijakstra,最大流量;我希望图形非常庞大,而且性能非常重要。
和C提高性能
您可以使用纯托管代码编写性能相当不错的应用程序。以这个网站为例。这真是太快了,你不觉得吗?
我的看法是这样的:只有当你真的是某种性能狂热者(例如,有人试图解决谷歌所做的缩放问题),或者如果你有一些现有的C代码库,你不能立即移植到。net,你必须与之互操作时,才混合使用这两种技术。
在其他情况下,托管代码更安全。如果您对性能感到厌烦,请不要忘记,在许多情况下,托管和非托管代码之间的封送处理成本将高于您从纯非托管代码中获得的性能。JITter也会随着框架的每一个版本变得越来越聪明,也许有一天它会生成几乎和非托管代码一样高效的代码。
所以,是的,去管理,把C留给疯子:-)
对于你要做的事情,我不太确定C会比c#快。编译后的代码非常快。此外,如果您正在进行大量计算,那么通过使用c#/.net,您可以潜在地利用任务并行库,它将大大简化计算的并行化。真的,对于所有的多核机器,我认为如果你能利用多核,你会得到更多的回报(当然,直接C也可以线程,但。net 4中的TPL比基本的WinApi更高效)
你可能会考虑的另一件事,我是从我自己的经验之外说的,所以一定要做自己的研究:我听说f#可以是编写科学集合/计算库的一个非常好的选择。我自己没有写过一行f#,但据我所知,该语言设计支持以一种使它们非常并行化的方式编写计算。
(当然,现在你有一个新问题——学习f#;)
这里有一篇文章,你可以看看:f#在科学计算中的性能
获得固定的内存位置,并将索引转换为C指针可能会产生负面影响。您可以尝试安全和不安全的代码,并尝试查看结果,但我的猜测是安全代码最终会表现得更好。当然,你的计算也是一个重要的因素。
我以前就这样做过,我想说的是,正如其他人提到的,编组的成本不是免费的,所以在这是一个有效的选项之前,您需要一些非常特殊的需求。
我给你的唯一建议是从最适合的语言开始,如果你想要托管代码和c#提供的其他功能,那就是c#。然后,如果性能是一个问题,那么在权衡利弊后,通过添加一些C代码来做一些分析和优化,并考虑是否可以通过重做高级算法而不是在较低级别进行优化来获得一些优化。
例如,如果你要编写科学代码,你会使你的代码多线程,或者检查你不能重用以前的计算,然后再尝试其他类型的低级优化,这将对你的效率产生更大的影响,而不是追逐小问题。