【发布时间】:2012-02-19 04:24:40
【问题描述】:
我对编写代码的正确方法有点困惑。我读到我不必在变量中保留引用,因为垃圾收集不会清理它,但我不明白一些事情。
-
这段代码怎么样:
private List<String> foo; public List<String> bar () { foo = new List<String>(); foo.add(something); return foo; }
每次我调用 bar 方法时 old foo list 丢失引用,它将成为垃圾收集的候选对象?我应该在类开始时声明(并初始化????)大部分变量并在方法开始后使用或声明之前并在方法内初始化?
2。 处置的对象呢?如果我写这段代码
private void browser_navigating(Object sender, NavigatingEventargs e)
{
Uri someurl = new URI(something);
List<String> somelist = new List<String>();
}
如果我有 20 个使用导航事件的 webBrowser 对象,它们会在导航事件触发时创建 Uri 和 List 对吗?但是当我处理 webBrowser 时,事件内部的对象会发生什么?他们会失去参考吗?当我处理一些适用于他所有孩子的东西时,它是否也适用于那些不实现 iDisposable(如 Uri 和 List)的对象,所以它们会从垃圾中清理掉还是留在内存中?
2.1。此事件在注册它的对象被释放后会自动取消注册?
3) 我读到静态对象是内存泄漏的问题。 如果我需要多次使用一个类,我是否应该每次都创建它,我需要将它声明为静态(例如,在我的情况下,我有一个静态连接类,它里面有登录和与网络服务器通信的方法,我声明静态的(在我的 mainWinform 类中),因为我将登录时收到的 cookie 存储在其中)
我会感谢你能回答我的问题。
【问题讨论】:
标签: .net events memory memory-leaks