4

我工作的应用程序是一个几乎完全用 Visual C++ 大约在 2003 年编写的 WinForms 应用程序。在我到达现场之前,由于 UI 构建框架而选择了 .NET,但绝大多数代码是在非托管领域开发的. 其中一部分是绝对必要的——我们对一些非常大的数据集进行一些实时图像处理,使用一些需要指向图像缓冲区的指针的英特尔图像处理库,我们确实不到 1% 的情况下性能有那么重要吗?

该应用程序本身是一个大型可执行文件,通过将 UI 代码链接到几个静态库而形成,每个静态库都对应一个功能子系统——数据采集、图像处理等。自从我加入以来,我通过编写托管包装器将其中几个子系统拆分为 DLL,我们在其他应用程序中重用它们,但主应用程序仍然基本上由静态链接库组成。

我的同事和我在进一步发展应该强调非托管还是托管方面存在很大分歧。除了我提到的情况外,没有规定非托管代码的性能要求。我们坚定地致力于 .NET,因此跨平台不是问题。我认为除非另有规定,否则我们应该支持托管。

上个月,我的同事开发了一组管理子系统的类;他没有将它们实现为 ref 类并将一些事件添加到 .NET 接口,而是编写了几个 Observer 实现,使用 gcroot 来保存托管客户端的句柄,并允许自己留在非托管领域。这在我看来是错误的,只是因为为什么要写一些你可以免费拥有的东西?但我想知道我是否过于刻板。

有什么想法吗?

4

2 回答 2

0

托管与非托管编程之禅:

良好的非托管代码将通过在内存管理错误与等效托管代码方面没有明显劣势来举例说明。

良好的托管代码将通过在性能上与等效的非托管代码相比没有明显的劣势来举例说明。

他们两个之间的互操作没有什么好处;)

于 2014-02-14T20:07:20.177 回答
0

没有单一的正确或错误答案,除了说你倾向于管理而你的同事倾向于非管理绝对是错误的。无论您选择哪种方式,您都需要达成一致,以免使某些代码托管和某些代码未托管的问题变得更糟。

您说“我们坚定地致力于 .NET”。这里的“我们”是谁?是你的公司还是你和你的同事?听起来您的同事对 .NET 不太投入。如果公司承诺而同事不承诺,那么需要有人向你的同事重申他是团队的一员,需要遵循公司的方向。

如果决定真的取决于你们两个,而你的同事不让步,那么你应该考虑默许。

我们也有一个大型托管/非托管应用程序,除非我们绝对必须这样做,否则我们永远不会考虑在非托管中做任何事情。应用程序的大部分是托管的。这样会好很多。但这是我的看法,不是事实。

于 2012-08-09T04:13:18.967 回答