c# - 结构和垃圾回收

标签 c# memory-leaks garbage-collection value-type

我正在检查我的服务的内存使用情况,发现私有(private)字节随着时间的推移而增加。该服务创建它需要的新组件,并且它们仅在服务停止时才被释放。因此,我正在搜索在有服务调用时创建新组件的代码,并在不需要时尝试处理它们。我正在使用 PerfMon 检查私有(private)字节。

那么到目前为止,我是否在正确的轨道上?

此外,我发现其中一种方法每次都会创建新结构,然后它不会被处置或分配给 null。

var structInfo = new MyStruct();
structInfo .StructSize = Marshal.SizeOf(structInfo);
MyClass info = this.BuildStructInfo(structInfo);
return info;

编辑:

该方法返回从结构中获取其值的类。

是否需要对structInfo进行处理,什么都不做会被GC回收吗?

最佳答案

结构是一种值类型(例如 int)。如果超出范围,它将自动进行 GC。

有时您会看到内存使用量越来越大,但根本没有任何内存泄漏:如果有足够的可用内存,您的 GC 将不会经常运行。

我建议使用内存分析器,它可以告诉您为什么某些对象保持事件状态。我可以推荐YourKit for .NET profiler ,有 30 天的免费试用期:

  • 通过 YourKit 开始你的应用
  • 拍摄内存快照
  • 搜索/浏览您怀疑泄露的类(class)
  • 从 GC-root 中选择路径

关于c# - 结构和垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828382/

相关文章:

c# - 是否应该将新项目添加到列表 <> 更新列表中的先前项目?

c++ - 为什么保留的虚拟内存会增长而当前正在使用的虚拟内存不会增长?

javascript - WebGL 对象是否被垃圾收集?

java - Java中的内存使用

c# - 将捕获的数据从 OutputDataReceived 发送回调用方

c# - 连接字符串时如何插入空格 ("")?

c# - 从访问站点的任何用户接收有关托管域电子邮件 ID 的电子邮件

objective-c - componentsSeparatedByString内存泄漏,能帮我吗?

Objective-C 重用 NSString 内存泄漏

c# - 在 C# 中处理对象破坏的最佳方法是什么