gpt4 book ai didi

.net - 我的应用程序不受管理。我从哪里开始引入托管代码?

转载 作者:行者123 更新时间:2023-12-04 15:37:57 24 4
gpt4 key购买 nike

我的整个应用程序(相当大,有 20MB 的可执行文件)是用非托管 C++ 编写的。
因为我可以清楚地看到使用托管代码的优势,所以我想开始在我的应用程序中引入托管代码,但是从哪里开始呢?

我可以轻松开始使用 C++/CLI 并将其与我的应用程序的其余部分链接吗? (尽管 C++/CLI 语法看起来相当“异国情调”)。

还是迁移到 C# 更好,但是将它与我​​的非托管 C++ 代码“链接”在一起的最佳方法是什么?

使用/clr 选项编译我的所有 C++ 代码是否有意义?这行得通吗?

我需要担心编码吗?这是否会产生开销,或者我可以在托管和非托管之间切换而不会降低性能(就像我 20 年前混合 fortran 和 C 时所做的那样)。性能在我的应用程序中非常重要,因为它是一个有时会处理数 GB 内存的科学应用程序。

还是只重新设计用户界面才有意义,只用 C# 编写它,并将我的应用程序的其余部分(计算逻辑、业务逻辑、数据库接口(interface)......)保留在非托管 C++ 中?

由于我的应用程序有时需要处理几千兆字节的内存,所以我有一个 64 位的变体。拥有 64 位托管代码容易吗?如果使用那么多内存,垃圾收集器是否仍然有效?

简单地说:我从哪里开始?

帕特里克

最佳答案

分析应用程序,决定在哪些集成点可以断开 C# 逻辑线并进入 C++,反之亦然。将这些安排成一个计划,以使 Facade 设计模式在系统中移动,逐渐用 C# 代替 C++。在决定在每个候选外观/界面上切换语言时,关键问题是 CPU 和内存成本。

您将希望能够合并编辑,因此您最好使用原始 C++ 代码的一个源代码集和源代码存储库以及外观和 C# 的另一个集和存储库。

然后,当增强/维护工作进入托盘时,您将其应用于两个代码库,并尝试确保外观在系统中移动,从增强或维护中最不可能更改的代码开始,以最大程度地减少更改工作的加倍.

还可以理想地组织您的工作,以便您可以在遇到障碍时立即回滚外观以返回 100% C++。

要测试几个特别难以理解的 C++ 模块是否可以分成 C++ 部分和 C# 部分,请在使用管道或套接字进行通信的两个不同 Win32 C++ 进程中运行它们。这样,您将更好地了解内存管理或性能是否存在需要修复的问题,然后才能拆分调用链。

关于.net - 我的应用程序不受管理。我从哪里开始引入托管代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922954/

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