Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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++;vs C#,性能方面的选择(VS2010)_C#_C++ - Fatal编程技术网

C++;vs C#,性能方面的选择(VS2010)

C++;vs C#,性能方面的选择(VS2010),c#,c++,C#,C++,我正在开发一个用于读取、处理和显示数据的工具。我对我在C++/C#之间的选择感到困惑。我只做了C++控制台编程。没有GUI或没有C# 我将使用VS2010(必修) 我在网上读了很多书。我知道,当谈到高性能,C++是最好的选择。我将列出我需要的: 图形用户界面 读取文件(一个文件约为25MB,一次可能使用大约5000个图像进行进一步处理) 处理数据。主要是数学运算 显示数据。这些可能又是沉重的数据。(~GBs)。我正在考虑使用OpenGL来实现这一点 我从VC++下的Windows窗体应用程序开始

我正在开发一个用于读取、处理和显示数据的工具。我对我在C++/C#之间的选择感到困惑。我只做了C++控制台编程。没有GUI或没有C#

我将使用VS2010(必修)

我在网上读了很多书。我知道,当谈到高性能,C++是最好的选择。我将列出我需要的:

  • 图形用户界面
  • 读取文件(一个文件约为25MB,一次可能使用大约5000个图像进行进一步处理)
  • 处理数据。主要是数学运算
  • 显示数据。这些可能又是沉重的数据。(~GBs)。我正在考虑使用OpenGL来实现这一点
  • 我从VC++下的Windows窗体应用程序开始。我做了一个GUI,它相当快。我在阅读文件时遇到了一些问题。我周围的大多数人都在使用MFC(基于对话框)。但他们主要从事固件编程。他们建议我用MFC开发。但我意识到我的工作效率下降了


    现在由我决定用什么。所以我的问题是:对于这个工具应该执行的任务,它值得去MFC还是更好的我移动到C(或C++ CLR)。如果我的表现有了显著的改善,时间不是最大的问题

    这是发展的第一部分。后来,它需要扩大。记住这一点,什么对未来前景更有利。(如果这些信息有用,我们可能需要使用CUDA进行处理。)

    我希望我明白了。如果需要,请温柔地询问更多细节

    编辑:

    谢谢你的明确答复。正在读取的数据是二进制图像(每个25 MB~-35 MB)。1000个图像被堆叠和处理(不是一次全部,而是逐像素)。我已经在MATLAB中实现了它,所以我对这个过程有一个公平的想法。主要对数据进行统计分析和傅立叶分析。最后生成一个点云。我正在考虑使用PCL(C++中的点云库)。这些不是很大,因为我现在正在MATLAb中显示。将来,文件可能会变得更大,所以我们将转向C++/C#环境。显示的数据需要具有诸如选择点和显示选项等功能,以显示该特定点的特性/绘图等。图形不太容易显示,但更重要的是选择一个特征的能力。

    < P> C和C++将给出几乎相同的性能,除非你在长时间内谈论大量的数据。在大多数情况下,C++可以在C以上给你一小部分秒;因此,在任何日常应用中,这并不是一个很大的优势

    然而,在最终性能绝对重要的情况下,例如驱动程序或电子游戏,获得的毫秒和由C++提供的手动内存控制是明显的优势。对于其他方面,C#通常更容易编写和调试,速度更快。托管代码意味着您在大多数情况下不必处理任何内存分配或释放。我也认为它提供了更“干净”的代码文件

    NET中的GUI是在WinForms或WPF中完成的。大多数人可能会指出WPF是一个明显的选择,因为它是一个非常。。。与DirectX相比,它的主要优势之一是更年轻的技术,这意味着高端计算机将更快地绘制界面

    但是,如果您计划在3D中显示大量自定义信息,您可能会发现直接编写您请求的DirectX/OpenGL代码要容易得多。然后,您可以使用SlimDX这样的包装器来简化您的生活。但您应该知道,如果您以前从未处理过此类代码,那么学习用DirectX或OpenGL编写任何面向对象的代码确实不是一件容易的事情。着色器本身就是一个非常特殊的世界

    如果您可以提供有关正在处理的数据的更完整信息以及显示数据的计划方式,我们可以为您提供更完整的解决方案

    更新:


    我猜,在这种情况下,你不会发现C和C++之间的性能有很大的差别,如果你使用外部库来进行一些计算,那就更大了。C和C++都可以使用相同的库。如果图形计算如此繁重,最有可能的方法是通过DirectX/OpenGL将它们传输到GPU,但只有在您考虑几分钟甚至几小时的密集计算时才会这样做。因此,使用C++的方法可能更容易和更快。如果我在性能方面有了显著的提高,时间不是最大的问题。然后在每种语言中做一个原型,测量关键操作的时间,选择最快的一个。你可以总是混合两个使用C来简化GUI设计,并编写一个本地C++代码或更好的代码。用于C++中速度不够快的任务的C++/CLI模块。提防过早的优化,最好是让它工作,然后看它是否太慢。你可以使用C语言,没有问题,但是我建议你使用WPFE.处理数据部分是唯一真正受益于C++的部分。但是如果不知道是哪种处理方式,就不可能说您是否需要使用本机代码以使其足够快。。。如果需要非常快的速度,可以使用GDI+或XNA在托管代码中进行图形显示。就个人而言,我避免C++,因为它在开发中要慢得多。首先,在给出建议之前,我们需要更多的信息来了解你在做什么。这些数据是什么?为什么您认为应该使用OpenGL来显示它。只有使用C++控制台应用程序,OpenGL才有巨大的学习曲线。我建议MFC是一种非常过时的技术,我不会将其用于任何新项目。速度方面的MFC肯定不会比C快。对于读取数据的一些数学文件,在屏幕上显示,C和C++之间没有什么区别,但你自己的MLIAG