gpt4 book ai didi

c# - 在为图像处理项目选择 C# 和 C++ 时,我应该考虑哪些因素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:52 25 4
gpt4 key购买 nike

我想开发一些图像处理代码,我想知道用 C++ 和 C# 开发它们是否有很大区别?

有没有详细的文档解释什么用C#实现好,什么用C++实现好?

据我所知,由于 C# 代码在运行前被编译为机器码(使用 .NET CLR JIT 编译器),如果在代码开发期间,您可以查看特定语言建议实现设计模式(例如,使用大量新数组与使用固定数组)。

编辑: 还有一些我一开始没有想到的其他参数,但是当我阅读一些答案时,我现在正在看:1-这是一个高级项目,这意味着我可以要求用户拥有一台非常好的计算机(大量内存和多核处理器)2-我可以假设用户有一个非常好的图形卡,所以我可以使用它的 GPU 进行处理。3- 我认为 WPF 有利于这种发展(我说得对吗!)。 C++有没有类似的库?我使用 MFC,但我不确定在处理需要显示图像的项目时 MFC 是否和 WPF 一样好,GUI 非常重要。

最佳答案

.NET IL 被编译为机器代码,就像 C++ 一样。但几乎总是 C++ 代码会更快,因为:

  • 编译时间成为运行时的一部分(只有一次,但有时这是一个问题)
  • 由于上述原因,JIT 编译器在优化上花费的时间少于 AOT 编译器。因此,JIT 生成的代码通常较慢。例如,JIT 通常不会矢量化任何东西,这对图像处理很重要。大多数情况下,由于 VM 限制,甚至无法生成矢量化代码(Mono.Simd 是一个异常(exception))
  • VM 中的语言必须确保程序不会逃逸 VM。例如,他们必须在每次访问时检查数组边界(除非编译器可以证明索引始终在范围内;请记住,JIT 编译器不会在此类分析上花费太多时间)。
  • 对于时间关键的内核,您可以自己插入汇编程序指令。 VM 不允许这样做,因为汇编程序可能会脱离 VM。

在某些情况下,托管代码可能比非托管代码更快:

  • 垃圾收集器允许比 malloc 更有效地分配内存。但是,除非内存只是短时间使用,否则 Mark-And-Sweep 也需要一些时间。
  • JIT 可能会在代码上使用更多静态假设(例如,它知道虚函数的所有可能实现)来编译代码,并在假设不再成立时重新编译。这是在 Java HotSpot 中完成的,但不是在 Microsoft 的 JIT 或 Mono 中。

总结:如果执行速度很重要,请使用 C++。但是 C# 可以很快足够,正如 Paint.NET 所展示的那样。还要考虑主要使用 C# 编写代码的选项,一旦您对某些重要功能的速度不满意,请在 C++/CIL 中重新实现它。或使用 P/Invoke 调用优化函数.

关于c# - 在为图像处理项目选择 C# 和 C++ 时,我应该考虑哪些因素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com