【发布时间】:2011-09-28 20:44:18
【问题描述】:
在使用 SlimTune 分析 C# 应用程序时,我发现启用分析本机函数时,有很多条目用于名为“CoUninitializeE”的函数。 CoUninitialize 似乎与 COM 对象有关,但是我没有直接使用任何 Com 对象,而且 Google 没有关于以 E 结尾的版本的信息。
有没有人知道这个功能是什么/如何减少花在它上面的时间? (例如,它是否与内存管理有关,因此减少内存分配或释放会有所帮助?)
编辑
看来该函数的名称实际上是“CoUninitializeEx”,而 SlimTune 只是出于某种原因砍掉了一个字母。我仍然希望了解导致此函数被调用的原因。
【问题讨论】:
-
AFAIK 没有 CoUnitializeEx。可以发截图吗? CoInitialize/Ex & CoUninitialize 用于向 COM 库注册线程。我假设主线程总是在库中注册,即使您没有在主入口点提供线程属性(STAThread/MTAThread)。
-
CoUninitializeEx 似乎也在调用 CorLaunchApplication,它调用 TranslateSecurityAttribute,它调用 GetAddrOfContractShutoffFla...,它调用 SetCounterName,它调用 WaitForSingleObject,它调用 WaitForSingleObjectEx。许多这些功能似乎以 COM 为中心,但我没有(直接)使用我知道的任何 COM 对象。我使用的唯一标准库是 System.Math。
标签: c# .net profiling clr slimtune