【发布时间】:2010-10-25 11:12:41
【问题描述】:
我正在做一个与SQL Server 对话的项目,大部分后端代码都在C++ 中。
这是一个应用程序,可在将少量流体装载到载体中时控制它们的流动。一些与控制器对话的后端模块反过来控制流体的流动在C++。由于它们存在内存泄漏和其他一些错误,因此已尝试将它们迁移到.Net。
我的理解是,当我们将.Net 用于后端模块时,性能会下降。所以我的意见不是将这些后端模块转换为 .Net,而是解决 C++ 本身的问题。
讨论的代码是一个与控制器固件交互的应用程序。它基本上需要一些命令并从控制器获得响应。此代码没有 UI,并且相同的代码也与 SQL 交互以更新数据。两者都是一个exe的一部分。
.Net 在预期性能不严格时被认为是好的。如果必须编写新代码,尤其是涉及 UI 设计时,这将是合适的。另一种思想流派是,.Net 适用于较高层,但不适用于多层架构中的较低层。
我想从不同的角度了解其他人的意见。需要考虑的一些方面是:
- 速度
- 代码的可维护性
- 未来与迁移相关的风险
- 等
请从重写现有代码的角度发表评论。如果我们决定这样做,这将是一对一的 C++ 行到 C# 的转换。
【问题讨论】:
-
好的。但问题是什么?在你的情况下,我认为 C++ 是要走的路。仅仅因为您有内存泄漏或错误,您就不会想到逃避它并使用 C#。如果您没有正确测试它,您可能会产生相同的错误(甚至更糟); C++ 或 C# 无关紧要。对于内存问题,请使用“valgrind”(谷歌了解更多)等工具分析您的代码。
-
确实,.NET 应用程序比写得不好的 C++ 应用程序运行得更好。但听起来 C++ 是要走的路,尤其是在引用直接硬件交互时。请记住,.NET 可能存在内存泄漏(例如,将某些内容添加到集合中并忘记它)。我绝对同意 Abhay 的观点,即你不应该仅仅因为 /your company's/ C++ 到目前为止一直很差就放弃 C++。
-
我不知道您所说的“驱动程序”是什么意思:通常,说“驱动程序”和“与固件交互”意味着“内核模式”软件,但我没有听说过内核模式驱动程序也与 SQL 交互。
-
我误解了这个问题......不要重写 - 只需修复错误和泄漏。除非你有充足的时间并且缺乏优秀的 C++ 开发人员,否则不要在 .Net 中重写
-
“驱动程序”一词可能具有误导性。让我纠正一下。有问题的代码是“与 RS485 端口上的控制器固件对话的应用程序。
标签: c# c++ performance optimization porting