我正在考虑开发Winforms应用程序,该应用程序将使用c库来执行所有计算。我想使用C#,因为使用它开发GUI非常简单,而C则可以提高性能。结合这两种语言还有其他优点或缺点吗?
编辑:作为计算我的意思主要是(但不限于)图算法,如着色,dijakstra,最大流量;我希望图表是巨大的,性能非常重要。
答案 0 :(得分:12)
和C以提高性能
您可以使用纯托管代码编写效果非常好的应用程序。以这个相同的网站为例。它的速度非常快,你不觉得吗?
我看待事物的方式如下:只有当你真的是某种表现狂人(试图解决Google所做的扩展问题的人)或者你有一些现有的C代码库时才混合这两种技术你不能立即移植到.NET,你必须与之互操作。
在其他情况下,托管代码更安全。如果您对性能感到厌倦,请不要忘记,在许多情况下,托管代码和非托管代码之间的编组成本将高于纯非托管代码的性能。此外,JITter对每个版本的框架都变得更聪明,更聪明,也许有一天它会生成与非托管代码一样高效的代码。
所以,是的,去管理并将C留给疯子: - )
答案 1 :(得分:2)
我不太确定C会比C#更快地完成你的工作。 jitted代码非常快。此外,如果您正在进行大量计算,通过使用c#/ .net,您可以利用任务并行库,这将极大地简化计算的并行化。事实上,对于所有的多核机器,我认为如果你可以利用多个核心,你将获得更多的收益(当然,直接C也可以,但是.net中的TPL) 4比基础WinApi更有效率
您可能会考虑另外一件事,而且我是在我自己的经验之外发言,所以一定要做自己的研究:我听说F#可以成为编写科学集/计算库的一个很好的选择。我自己没有写过F#,但从我的理解来看,语言设计支持以一种非常可并行化的方式编写计算。
(当然,现在你遇到了一个新问题 - 学习F#;)
这里有一篇文章,您可以查看:F# performance in scientific computing
答案 2 :(得分:1)
获取固定的内存位置,以及将索引转换为C指针可能会产生负面影响。您可以尝试安全和不安全的代码并尝试查看结果,但我的猜测是安全代码最终会表现更好。当然,您的计算也是重要的因素。
答案 3 :(得分:0)
我过去已经这样做了,我会说,正如其他人提到的那样,编组的成本并不是免费的,所以在这是一个有效的选择之前你需要一些非常专业的需求。
我唯一的建议是从最适合的语言开始,如果你想拥有托管代码和C#提供的其他功能,那就是C#。然后,如果性能是一个问题,并通过在加权优势之后在C中添加一些代码并考虑是否可以通过重新设计高级算法而不是在较低级别进行优化来进行一些优化来进行一些分析和优化。
例如,如果您要编写科学代码,您可以使代码具有多线程性,或者在尝试其他类型的低级优化之前检查您是否无法重复使用先前的计算,这将对您的效率产生更大的影响,而不是追逐微小的问题。