c# - 如何在 C#/.NET 中创建内存泄漏

标签 c# .net memory-leaks

<分区>

Possible Duplicates:
Is it possible to have a memory leak in managed code? (specifically C# 3.0)
Memory Leak in C#

昨天有一个类似的问题,但对于 Java,所以我很感兴趣 - 在 C#/.NET 中创建内存泄漏需要什么(不使用不安全)?

最佳答案

静态事件;致命,因为它们永远不会超出范围。

static event EventHandler Evil;

for(int i = 0 ; i < 1000000 ; i++)
    Evil += delegate {};

匿名方法在这里只是一个不错的选择,但很好,因为它们也是取消订阅的 pig ,除非您将副本复制到变量/字段并订阅那个.

技术上这实际上并不是“泄漏”,因为您仍然可以通过 Evil.GetInvocationList() 访问它们 - 但是,当与常规对象一起使用时,这可能会导致意外的对象生命周期,即

MyHeavyObject obj = ...
...
SomeType.SomeStaticEvent += obj.SomeMethod;

现在 obj 处的对象永远存在。这足以满足 感知到的泄漏 IMO,并且“我的应用死得很惨”对我来说已经足够了;p

关于c# - 如何在 C#/.NET 中创建内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567916/

相关文章:

排除因内存导致的 iPhone/iPad 设备崩溃问题

.net - 多线程和 bool 值

.net - 使用正则表达式查找匹配的括号

Javascript:如何使用 JavaScript 可读的特殊字符来操作生成的字符串(来自 .net)

c# - 如何在 .net 2.0 项目中使用 .net 3.0 类?

tomcat:取消部署war文件不会卸载类

python - 如何在 python 脚本中跟踪内存使用增长的对象

c# - 请对 C# IDisposable 做一些说明

c# - 关闭范围和垃圾收集

c# - 等待和并行