我工作的应用程序是一个几乎完全用 Visual C++ 大约在 2003 年编写的 WinForms 应用程序。在我到达现场之前,由于 UI 构建框架而选择了 .NET,但绝大多数代码是在非托管领域开发的. 其中一部分是绝对必要的——我们对一些非常大的数据集进行一些实时图像处理,使用一些需要指向图像缓冲区的指针的英特尔图像处理库,我们确实在不到 1% 的情况下性能有那么重要吗?
该应用程序本身是一个大型可执行文件,通过将 UI 代码链接到几个静态库而形成,每个静态库都对应一个功能子系统——数据采集、图像处理等。自从我加入以来,我通过编写托管包装器将其中几个子系统拆分为 DLL,我们在其他应用程序中重用它们,但主应用程序仍然基本上由静态链接库组成。
我的同事和我在进一步发展应该强调非托管还是托管方面存在很大分歧。除了我提到的情况外,没有规定非托管代码的性能要求。我们坚定地致力于 .NET,因此跨平台不是问题。我认为除非另有规定,否则我们应该支持托管。
上个月,我的同事开发了一组管理子系统的类;他没有将它们实现为 ref 类并将一些事件添加到 .NET 接口,而是编写了几个 Observer 实现,使用 gcroot 来保存托管客户端的句柄,并允许自己留在非托管领域。这在我看来是错误的,只是因为为什么要写一些你可以免费拥有的东西?但我想知道我是否过于刻板。
有什么想法吗?