Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和C结合的优点/缺点_C#_C_Winforms_Dll - Fatal编程技术网

C#和C结合的优点/缺点

C#和C结合的优点/缺点,c#,c,winforms,dll,C#,C,Winforms,Dll,我正在考虑开发Winforms应用程序,该应用程序将使用c库来执行所有计算。我想使用C#,因为用它开发GUI非常简单,而C可以提高性能。将这两种语言结合起来还有其他优点或缺点吗 编辑:作为计算,我指的主要是(但不限于)图形算法,如着色、dijakstra、最大流;我希望图形是巨大的,而性能是非常关键的 和C以提高性能 您可以使用纯托管代码编写性能相当好的应用程序。以这个非常相同的站点为例。真他妈的快,你不觉得吗 我的看法是:只有当你真的是一个性能狂热者(比如,试图解决谷歌所做的扩展问题的人)或者

我正在考虑开发Winforms应用程序,该应用程序将使用c库来执行所有计算。我想使用C#,因为用它开发GUI非常简单,而C可以提高性能。将这两种语言结合起来还有其他优点或缺点吗


编辑:作为计算,我指的主要是(但不限于)图形算法,如着色、dijakstra、最大流;我希望图形是巨大的,而性能是非常关键的

和C以提高性能

您可以使用纯托管代码编写性能相当好的应用程序。以这个非常相同的站点为例。真他妈的快,你不觉得吗

我的看法是:只有当你真的是一个性能狂热者(比如,试图解决谷歌所做的扩展问题的人)或者如果你有一些现有的C代码库,你不能立即移植到.NET,并且你必须与之互操作时,才混合使用这两种技术

在其他情况下,托管代码更安全。如果您对性能不满意,请不要忘记,在许多情况下,托管代码和非托管代码之间的封送处理成本将高于您从纯非托管代码中获得的性能。而且,随着框架的每个版本,抖动变得越来越智能,也许有一天它将生成几乎与非托管代码一样高效的代码


所以,是的,选择托管并将C留给疯子:-)

获得固定内存位置,并且将索引转换为C指针可能会产生负面的副作用。您可以尝试安全代码和不安全代码,并尝试查看结果,但我的猜测是,安全代码最终会执行得更好。当然,你的计算也是一个重要因素。

对于你要做的事情,我不太肯定C会比C快。jitted代码非常快。此外,如果您正在使用c#/.net进行大量计算,则可以利用任务并行库,这将大大简化计算的并行化。事实上,对于所有的多核机器,我认为如果你能利用多核,你会得到更多的回报(当然,直C也可以线程,但是.NET4中的TPL比基本的WinApi更有效率)

另一件事,你可能会考虑,我是从我自己的经验之外,所以一定要做你自己的研究:我听说,F是一个很好的选择,写科学集/计算库。我自己还没有写过一行F#,但据我所知,语言设计支持以一种使计算极其并行的方式编写计算

(当然,现在你有了一个新问题——学习F#)


这里有一个帖子,您可以查看:

我过去做过,我想说,正如其他人提到的,编组的成本不是免费的,所以在这是一个有效的选择之前,您需要一些非常专业的需求

我给你的唯一建议是从最适合的语言开始,如果你想拥有托管代码和C提供的其他功能,那就是C语言。然后,如果性能是一个问题,在权衡利弊之后,通过在C中添加一些代码仔细分析和优化,并考虑是否可以通过修改高级算法而不是在较低级别进行优化来获得一些优化


例如,如果您要编写科学代码,您将使代码具有多线程性,或者在尝试其他较低级别的优化之前检查您不能重用以前的计算,这将对您的效率产生更大的影响,而不是追逐小问题。

C#具有相当好的性能,在大多数情况下与C相当。为什么你认为两者都需要?如果不理解你想要执行什么“计算”,我们就不可能回答这个问题。但我很有信心,这个理由是完全错误的。C#紧张不安,跑得非常快。在走上这条路之前,你应该证明你的“计算”确实是性能关键的(而且,用C编写会有帮助)。确保C对你来说确实更快。写得不好的C比写得好的C慢。因此,写得不好(在这里插入快速语言)通常比写得好(在这里插入慢速语言)慢。代码质量是衡量速度的一个关键因素。作为计算,我指的主要是但不限于图形算法,如着色、dijakstra、最大流;我希望图形是巨大的,而性能是非常关键的。我不希望在C语言中失去代码质量:)我已经检查过F#-mayby,它确实会有帮助,但在它中学习和编写算法的时间太不可预测了:Pi以前有过这个论点,但我发现“C”是一种用于速度较慢的东西的脚本语言,真正的代码是用C/C++编写的