0

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

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

在我尝试大幅扩展我的服务之前,该代码运行良好。我要求支持取消计算核心配额并尝试扩展到 100(一百)个实例。

现在大多数实例都可以正常启动,但其中一些实例恰好面临上述情况 - DCOM 对象创建时间过长,因此代码抛出异常导致角色重新启动。

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

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

4

1 回答 1

0

到目前为止,我的研究表明,当我扩大大量实例时,一些实例在开始时会相当缓慢,尤其是在 IO 密集型操作方面。我认为这是因为运行 VM 的主机(8 核硬件服务器)正在做一些繁重的事情,因此对 IO 的竞争很激烈。在这些条件下,实例化一个通常需要大约 1 秒的 DCOM 对象可能需要长达 40 秒,而我的超时应该只是增加。

于 2012-06-26T09:34:05.690 回答