用户界面对象的线程亲缘性第五篇: 对象清理

用户界面对象的线程亲缘性第五篇: 对象清理

作者:BlogUpdater |  时间:2023-05-13 |  浏览:627 |  评论已关闭 条评论

作为一项基本原则,当一个进程退出的时候,窗口管理器和 GDI 对象会自动释放掉此进程中已创建的底层对象。(另外,窗口管理器在窗口所属线程退出的时候,也会听同时销毁窗口。)

请注意,这只是一个”兜底”机制,不应该成为资源泄露的借口,不应该觉着:”泄露点资源没事的,反正窗口管理器最终会帮我释放所有资源”,因为它是最后一道防线,我们不应该将它视作主要的资源保护手段。

首先,资源泄露了但不主动去处理,这个决定是草率的。这通常表明你的程序没有有效地跟踪自己分配的资源,并将其留给最后那道防线。这就好比,一个孩子将他的衣服扔在地板上,因为他知道他的母亲最终会过来捡起它并把它收起来。

另一方面,此清理发生在窗口管理器内部,在清理完成之前不会发生其他窗口管理器活动。如果你泄漏了数百或数千个对象,系统在视觉上似乎没有响应,因为窗口管理器正忙。(不过,系统仍在运行。不依赖于用户界面的操作(如计算密集型操作或网络活动)在窗口管理器清理时仍将正常进行。

为什么窗口管理器没有优化“大规模清理”方案?因为当你设计一个系统时,你专注于优化人们以负责任的方式使用你的系统的情况。你不想奖励那些虐待你的人。想象一下,如果你设计了系统,让滥用系统的人比遵守规则的人获得更好的性能,这会发出什么信息呢?

总结
资源泄露问题,尤其是内存和 GDI 资源的泄露,是我在开发 拓扑梅尔智慧办公平台 (Topomel Box) 一直都在关注的主题,我不希望走的太快,更愿意慢慢打磨。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Thread affinity of user interface objects, part 5: Object clean-up》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

相关推荐

评论已关闭。