草庐IT

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

coder 2024-02-03 原文

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




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

我将使用 VS2010(强制)。

我在网上做了很多阅读。我明白,当谈到高性能时,C++ 是最好的选择。我会列出我需要的:

  • 图形用户界面
  • 读取文件(一个文件约 25 MB,一次可能使用总共约 5000 张图像进行进一步处理)
  • 处理数据。数学运算为主。
  • 显示数据。这些可能又是重数据。 (~GBs)。我正在考虑为此使用 OpenGL。

  • 我从 VC++ 下的 Windows 窗体应用程序开始。我做了一个 GUI,它相当快。我在读取文件时遇到了一些问题。我周围的大多数人都在使用 MFC(基于对话框)。但他们主要从事固件编程。他们建议我应该在 MFC 中开发。但我意识到我的生产力下降了。

    现在由我决定使用什么。所以我的问题是:对于这个工具应该执行的任务,是否值得使用 MFC 或者我转向 C#(或 C++ CLR)更好。如果我在性能方面获得显着改善,时间不是最大的问题。

    这是开发的第一部分。以后需要扩展。记住这一点,什么对 future 前景更好。 (如果此信息有用,我们可能需要使用 CUDA 进行处理。)

    我希望我很清楚。如果需要,请保持温和并询问更多详细信息。

    编辑:

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

    最佳答案

    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# - C++ vs C#,性能方面的选择(VS2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16033665/

    有关c# - C++ vs C#,性能方面的选择(VS2010)的更多相关文章

    1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

      在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

    2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

      我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

    3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

      如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

    4. C# 到 Ruby sha1 base64 编码 - 2

      我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

    5. ruby - Rails 3 的 RGB 颜色选择器 - 2

      状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

    6. ruby - 使用 `+=` 和 `send` 方法 - 2

      如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

    7. 基于C#实现简易绘图工具【100010177】 - 2

      C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

    8. ruby - 如何计算 Liquid 中的变量 +1 - 2

      我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

    9. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

      我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

    10. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

      我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

    随机推荐