如何在C#/.NET中创建内存泄漏 [英] How to create a memory leak in C# / .NET

查看:93
本文介绍了如何在C#/.NET中创建内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复项:
是吗托管代码中可能发生内存泄漏? (特别是C#3.0)
C#中的内存泄漏

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

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

There was a similar question on this yesterday, but for Java, so I'm interested - what it takes to create a memory leak in C# / .NET (without using unsafe) ?

推荐答案

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

static events; DEADLY, since they never go out of scope.

static event EventHandler Evil;

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

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

The anonymous method is simply a nice-to-have here but are nice because they also are a pig to unsubscribe unless you take a copy into a variable/field and subscribe that.

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

Technically this isn't actually "leaked", as you can still access them via Evil.GetInvocationList() - however, when used with regular objects this can cause unexpected object lifetimes, i.e.

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

现在obj处的对象永远存在.这足以满足IMO的可感知泄漏,并且我的应用程序死于可怕的死亡"对我来说已经足够了; p

now the object at obj lives forever. This satisfies enough of a perceived leak IMO, and "my app died a horrible death" is good enough for me ;p

这篇关于如何在C#/.NET中创建内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆