跨C#和C+的垃圾收集+/CLI对象 我现在正在研究使用C++/CLI来弥补托管C++与本地、非托管C++代码之间的差距。我要解决的一个特别问题是C和C++中不同的数据类型的转换。
在阅读这种桥接方法的使用和涉及的性能影响时,我想知道垃圾收集将如何工作。具体来说,垃圾收集器将如何处理在任意一侧创建的对象的清理,如果它们在“另一侧”被引用/销毁 到目前为止,我已经阅读了关于和的各种文章和论坛问题,这使我相信垃圾收集器在同一进程中运行时应该跨两种类型的代码工作——即,如果一个对象是用C#创建并传递给C++/CLI桥,直到双方的参考资料不再使用,才会收集 在这种情况下,我的问题分为三个部分:跨C#和C+的垃圾收集+/CLI对象 我现在正在研究使用C++/CLI来弥补托管C++与本地、非托管C++代码之间的差距。我要解决的一个特别问题是C和C++中不同的数据类型的转换。,c#,garbage-collection,c++-cli,C#,Garbage Collection,C++ Cli,在阅读这种桥接方法的使用和涉及的性能影响时,我想知道垃圾收集将如何工作。具体来说,垃圾收集器将如何处理在任意一侧创建的对象的清理,如果它们在“另一侧”被引用/销毁 到目前为止,我已经阅读了关于和的各种文章和论坛问题,这使我相信垃圾收集器在同一进程中运行时应该跨两种类型的代码工作——即,如果一个对象是用C#创建并传递给C++/CLI桥,直到双方的参考资料不再使用,才会收集 在这种情况下,我的问题分为三个部分: 在同一进程中运行时,垃圾收集器可以跨代码的两个部分(C#和C++/CLI)工作,这一结论
- 组件A-(用C#编写)
- 程序集B-(用C++/CLI编写)
O
在程序集A中创建O
被传递到程序集B中的函数中O
的引用被释放O
的引用O
的引用您可以使用.Net Profiler之类的工具进行监视。另请看一下当代码实际运行时,没有一个是C#或C++/CLI。所有这些都是来自C#和C++/CLI的IL,以及来自与您进行互操作的本机代码的机器代码 因此,您可以将部分问题改写为:
- 汇编A-(IL,我们不知道它是用什么写的)
- 汇编B-(IL,我们不知道它是用什么写的)
.NET Prror将给您一些垃圾收集的信息,在性能监视器中,集合将被计数。
您应该清理C++代码中的任何引用。如果它适用的话,您也应该用C语言来做。如果您提供了一个代码示例,您的问题将是清晰的。+ 1垃圾收集器没有C或C的概念。在这个级别上,所有的东西都是CIL。不是。在这个级别上,它都是机器代码,不管是由抖动还是C++代码生成器生成。@ HANSPASANT在“这个级别”。?在它运行的级别上,当然都是机器代码,但在另一个级别上,IL将是与GC合作的机器代码,其余的则不会。我认为Matt选择哪个级别是“这个级别”更合适。