gpt4 book ai didi

c# - 结构和垃圾回收

转载 作者:行者123 更新时间:2023-11-30 20:05:10 24 4
gpt4 key购买 nike

我正在检查我的服务的内存使用情况,发现私有(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/

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