在扩展Azure角色时,实例化DCOM对象有时会挂起

时间:2012-06-19 09:27:45

标签: c# .net com azure dcom

在我的Azure角色启动代码中,我实例化一个DCOM对象,以确保它可以实例化,然后立即释放它,因为那时我真的不需要它。

我在一个单独的线程中执行此操作,实际上new是相应的C#RCW类,主线程Thread.Join()是该线程的30秒超时。如果线程在Thread.Join()返回后仍在运行,则意味着DCOM对象需要很长时间才能创建,因此调用Thread.Abort()并重新启动角色。 30秒应该足够 - 对象是轻量级的,并且在实例化时不会耗费任何时间。

该代码工作正常,直到我试图大幅扩展我的服务。我要求支持解除Compute核心配额并尝试扩展到100(100)个实例。

现在大多数实例都很好,但其中一些实际上遇到了上述情况 - DCOM对象创建花费的时间太长,因此代码引发了异常,导致角色重新启动。

我重复了几次测试。一旦我要求扩展几十个实例,问题就会在一些新启动的实例中重现。由于所有实例都是统一的,我不知道可能导致这种行为的原因。

DCOM对象在某些情况下花费这么长时间的原因可能是什么?

1 个答案:

答案 0 :(得分:0)

到目前为止,我的研究表明,当我通过大量实例扩展时,某些实例将在开始时刻附近变得十分笨拙,特别是在IO绑定操作方面。我认为这是因为运行VM的主机(8核硬件服务器)正在做大事,因此IO存在严重的竞争。在这些情况下,实例化DCOM对象通常需要大约1秒钟,最多可能需要40秒,我的超时时间应该增加。