我正在改进大量本机代码,它使用一些静态关键部分,从不调用DeleteCriticalSection,让他们处理退出以进行清理。
没有泄漏,也没有担心CS的总数太高,我只是想知道是否有任何长期的Windows后果不清理它们。我们有回归测试套件,每天会发送数千次程序,尽管最终用户不太可能做这样的事情。
由于部署的计算机范围很广,我们也必须考虑Windows XP,并且此本机代码是从托管应用程序运行的。
答案 0 :(得分:2)
关键部分只是一块内存,除非检测到争用,此时会为同步创建一个事件对象。进程退出将清除任何挥之不去的事件。如果你是在运行时动态创建它们而不是释放它们,那就太糟糕了。如果没有清理的是每个过程的固定金额,我不会担心。
原则上,当进程退出时,每个进程资源都会被清除。像事件对象这样的内核资源肯定遵循这个原则。
答案 1 :(得分:2)
简短的回答可能不是。答案很长,这是一个懒惰的编程实践,应该修复。
要正确使用DeleteCriticalSection,需要以有序的方式关闭,以便在删除之前/之后没有其他线程拥有或尝试拥有该部分。而程序员则懒得定义和实现shutdown对程序的工作方式。
你可以做很多事情,没有立即产生可衡量的后果 - 但这并不是正确的。对同一代码库中的其他句柄/对象的类似态度也会产生累积效应,并可能导致“后果”。