首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

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

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

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

总结

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

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《Thread affinity of user interface objects, part 5: Object clean-up》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230513A03ZEO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券