Marshal.ReleaseComObject存安全隐患

Visual Studio团队版首席开发工程师Paul Harrington撰文指出,在调用Marshal.ReleaseComObject()方法处理来自托管代码的COM对象时,会产生安全隐患并建议大家不要使用该函数。 Harrington使用Marshal.ReleaseComObject方法把Visual2010部分组件、Windows管理器、命令行栏和文本编辑器由本地代码转换成托管代码时发现了该问题。 VS 2005和2008已用本地代码编写这些组件,他们过去也能正常运行,直到把它们转换为托管代码时才出现问题。

要避免遗留未处理的COM对象,COM Interop已提供Marshal.ReleaseComObject方法,它降低RCW引用计数器的使用次数,该计算器用于计算有多少客户调用该对象。该方法返回引用次数的新值,该值“在运行时可调用封装器对封装的COM对象仅剩一个引用时通常为零,而不管当前托管客户端正调用它的次数”。与此同时,COM对象消耗的底层资源也因此释放。

查看英文原文:Marshal.ReleaseComObject Is Considered Dangerous
 

你可能感兴趣的:(Marshal.ReleaseComObject存安全隐患)