【发布时间】:2014-09-30 13:17:26
【问题描述】:
我已经为一个旧的 COM/OLE 服务器实例编写了一个 .net 包装器。它是一个有状态的包装器,需要一些初始化调用,然后是最终的“go/calculate 调用”。
此最终调用创建一个类的新实例,然后使用 System.Threading.Thread 创建一个新线程,该线程创建 COM 实例并使其能够独立于 IIS 工作线程运行,随后调用检查状态和最终得到结果。
问题是,当我尝试创建超过 20 个并发实例时,我会遇到内存不足异常。我尝试了各种调整 - 由于有状态的性质(我相信),创建多个工作线程无济于事。我已经尝试了很多这些
http://www.codeproject.com/Articles/133738/Quick-Ways-to-Boost-Performance-and-Scalability-of
无济于事。在我的压力测试器中,我尝试直接实例化包装类,而不是通过 WCF 服务,我可以在开始遇到问题之前运行超过 150 个实例。
有人知道增加 IIS 实例可以产生的工作线程数量的方法吗?
【问题讨论】:
-
不 - 正如我所说,我可以直接在同一个盒子上拨打电话并获得超过 150 个实例。只有当调用作为服务进行时,我才会获得 20 的硬限制。
-
OOM异常在哪里抛出?这是什么组件?什么调用栈?服务器进程是 32 位的,也许你的其他测试进程是 64 位的?
-
创建 'Activator.CreateInstance(rtwbType)' 时抛出异常,它是 64 位框,但 WCF 服务是 32 位的,它正在实例化的 COM/OLE 服务器也是如此。在抛出异常时,已经创建了一个新线程。该异常通常会导致当前整个 IIS 工作进程停止运行。
-
IIS 工作者在 19 个实例中的私有字节值是多少?让我们确保这与内存无关。
-
好的,听起来很明智。我该如何检查?限制为 0,即没有限制....
标签: c# multithreading iis com