我需要多个 STA 我的ASP.NET应用程序中的线程使用一些 COM 成分。

我在每个过程中的某个地方阅读了一个,只有一个 STA 线程可以存在。我编码了一个示例项目,并制作了许多线程,并将其公寓状态设置为 STA 他们与 COM 对象无例外。

有可能有很多 STA 过程中的线程?

有帮助吗?

解决方案

如果您的程序可与许多STA线程一起使用,那么为什么要问它是否有效? :) .NET允许您拥有任何数量的sta线程,因此必须工作。但是,对于仅具有一个主线程和一个消息循环的典型本机应用程序,您所读的内容可能是正确的。

其他提示

您可以拥有的STA线程数没有固有的限制,但是您可能想对自己施加如此限制。

如果您允许您的ASP.NET应用程序在新用户请求到达时创建其他sta线程,而无需限制它,则最终,随着CPU在上下文开关上花费的时间过高,线程数量将导致您的应用程序的性能恶化。这也使您的应用程序更容易受到拒绝服务攻击的影响。

您可以考虑设计,如果您设置了基于硬件或用户配置文件的sta线程数量的限制,并且一旦达到限制,则实现一些池量,以重新使用现有的STA线程以服务新的请求。

除了内存,没有其他上限。当堆栈的堆栈消耗了所有可用的地址空间时,通常比2000个线程稍微少了一个32位的过程。

牢记规则,您不能在不编组的情况下从另一个Sta中创建的对象。而且,不要忘记所需的消息循环,必须泵送一个线程以保持安排活力并防止死锁。显然,应强烈避免接近内存限制。

标准STA线程没有真正的限制,但是UI只有一个“特殊” sta线程具有消息循环。这可能是您在其他地方阅读的内容。尽管大多数com都可以使用任何sta线程,但某些com可能需要消息循环(例如计时器滴答),这将需要指向UI线程或消息泵送。

在这种情况下,STA消息循环是否需要?

http://blogs.msdn.com/b/cbrumme/archive/2004/02/02/66219.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top