代码之家  ›  专栏  ›  技术社区  ›  Andy Dent

不删除关键部分有什么后果吗?

  •  2
  • Andy Dent  · 技术社区  · 14 年前

    我正在精炼大量的本机代码,这些代码使用一些静态关键部分,从不调用 DeleteCriticalSection ,让他们处理出口进行清理。

    没有泄漏,也不担心CS的总数太高,我只是想知道不清理它们是否会造成长期的窗口后果。我们有一个回归测试套件,可以每天启动数千次程序,尽管最终用户不太可能做这样的事情。

    由于部署的机器的范围,我们还必须考虑Windows XP,并且此本机代码是从托管应用程序运行的。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Chris Smith    14 年前

    关键部分只是内存块,除非检测到争用,此时将创建事件对象进行同步。进程退出将清除所有延迟事件。如果您在运行时动态地创建这些文件,而不释放它们,那将是不好的。如果每道工序的未清理量是固定的,我就不用担心了。

    原则上,当进程退出时,每个进程资源都会被清除。像事件对象这样的内核资源肯定遵循这个原则。

        2
  •  2
  •   Winprogger    14 年前

    简短的答案可能不是。答案很长,这是一个懒惰的编程实践,应该是固定的。

    为了正确地使用deleteCriticalSection,需要有序地关闭,以便在删除之前/之后没有其他线程拥有或尝试拥有该节。编程人员懒得定义和实现关闭如何为他们的程序工作。

    有许多事情你可以做,但没有立即可衡量的后果-但这并不能使它正确。同样,对同一代码库中的其他句柄/对象的类似态度也会产生累积效应,并可能导致“结果”。