C# 垃圾收集 -> 到 C++ 删除

标签 c# c++ object garbage-collection delete-operator

我正在将 C# 项目转换为 C++,并且对使用后删除对象有疑问。在 C# 中,GC 当然负责删除对象,但在 C++ 中,它必须使用 delete 关键字显式完成。

我的问题是,是否可以只跟踪每个对象在整个方法中的用法,然后在它超出范围(即方法结束/重新分配)时立即将其删除?

我知道 GC 在删除之前会等待一定大小的垃圾(~1MB);它这样做是因为使用 delete 时有开销吗?

由于这是我正在创建的游戏,因此每秒可能会创建和删除大量对象,因此最好跟踪超出范围的指针,一旦该大小达到 1MB 就删除指针?

(作为旁注:稍后当游戏被优化时,对象将在启动时加载一次,因此在游戏过程中没有太多可删除)

最佳答案

你的问题是你在 C++ 中使用了指针。

这是一个你必须解决的根本问题,然后你所有的问题都会消失。机缘巧合,我受够了我创造的这种普遍趋势 a set of presentation slides在这个问题上。 –( CC BY ,所以请随意使用它们)。

看看幻灯片。虽然它们肯定不完全是认真的,但基本信息仍然是正确的:不要使用指针。但更准确地说,该信息应该是:不要使用delete

在您的特定情况下,您可能会发现自己有很多长生命周期的小对象。这确实是一种现代 GC 处理得很好的情况,而引用计数智能指针 (shared_ptr) 处理效率较低。如果(且仅当!)这成为性能问题,请考虑切换到 small object allocator图书馆。

关于C# 垃圾收集 -> 到 C++ 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598997/

相关文章:

C# Excel 自动化仅在 Excel 可见时起作用

c# - .NET 区域信息类

c# - .Net 对结构类型的泛型约束

c++ - tryentercritical 部分未声明的标识符

javascript - 是否可以构造一个对象,以便在请求其键时抛出错误?

JavaScript:查找值是否在数组中的对象内的最佳方法

c# - 有什么方法可以更改 JSON 中的日期时间格式吗?

c++ - 数据成员SFINAE的C++ 17测试:gcc与clang

c++ - 我在 Visual Studio 2008 中看不到俄语字母表

linux - 将 COM 对象暴露给在 Wine/Linux 中运行的应用程序