2009-02-19 102 views
3

我工作的应用程序是一个WinForms应用程序,几乎全部用Visual C++编写,大约在2003年。在我到达现场之前,由于UI构建框架,.NET被选中,但绝大多数代码是在非托管的土地。其中一部分是绝对必要的 - 我们对一些非常大的数据集进行一些实时图像处理,使用一些需要指向图像缓冲区的英特尔图像处理库,而我们真的,其中< 1%的情况性能是至关重要的。在混合C++ .NET应用程序中强调托管还是非托管?

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

我和我的同事对于是否进一步发展应该强调非托管还是管理有很大不同。除了我提到的情况外,没有规定非托管代码的性能要求。我们坚定致力于.NET,所以跨平台不是问题。我认为我们应该赞成管理,除非另有规定。

上个月,我的同事开发了一套管理子系统的类;而不是将它们作为ref类实现,并将某些事件添加到.NET接口中,他编写了Observer的几个实现,使用gcroot为托管客户端提供句柄,并允许自己留在非托管的土地上。这在我看来是错误的,只是因为为什么写一些你可以免费得到的东西呢?但我想知道我是否过于僵化。

有什么想法?

回答

0

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

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

如果决定真的取决于您和您的两位同事,那么您应该考虑默认。

我们还有一个很大的托管/非托管应用,我们绝不会考虑在非托管方面做任何事情,除非我们绝对必须这样做。大部分的应用程序是管理的。这样更好。但这是我的看法,不是事实。

0

的管理VS非托管编程禅:

良好的非托管代码将不必在内存管理上的错误与等效托管代码明显的缺点来举例说明。

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

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

相关问题