我遇到了这个例外,昨天:

Win32Exception: Fehler beim Erstellen des Fensterhandles

可能翻译:

Win32Exception: Error while creating the windowhandle

我知道如何解决这个(甚至写了一个简短的 博客 在主题在德国)

但我不知道我应用程序可能被泄漏的'不设置的控制,这仍然具有窗口处理。

是否有任何方法的检测/寻找实例

  • 实施 IDisposable
  • Parent == null

对象匹配这个制约似乎是很好的候选人。

有帮助吗?

解决方案

任何像样的记忆探查会告诉你控制的实例。他们不会被垃圾收集、处理他们的财产,让他们活着。有将近10 000。你也可以看到它与任务经理、使用图,+选择列和用户的对象。看计数增加,因为你正在测试的应用程序应该提供一个体面的暗示。

一个代码的审查应该很长的路要走也没有很多可能的方式泄漏一个窗口。第一次寻找最常见的情况下,代码通话的控制。明()或控制。除去/目()但并不是还处置的控制。下一个常见的情况是SystemEvents类,你必须明确地取消它的活动。其余的都没那么容易找到,你会需要,分析器。

找到处理自己在运行时在技术上是可能的反映。在处理储存在系统。内部。HandleCollector.handleTypes[].好吧,技术上。

其他提示

每个对象它实现 IDisposable 有一个 Dispose 法。这种方法应该被称为当的对象不再需要。是它使用一个单一的方法只,围绕着它一个 using 声明(电话 Dispose 自动)。如果这是一件可变你的课,你级应当执行 IDisposable 本身。 FxCop 有一个检查规则。

如果他们不被收集到,因为一些其他的目的是引用你的控制,既不调用处置,也不设置父空是不够的。也许你是附加的事件和不dettaching从他们。

检查特殊情况下的附加活动,从控制不被包含通过的类别,在这种情况下你应该永远分离的事件时处理控制,如果不控制仍然将继续引用的类别,因此它不会被释放

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top