5

根据MSDN for ProcessModel 中的文档, autoConfig=true 根据此知识库文章设置以下属性:

maxWorkerThreads、maxIoThreads、minFreeThreads、minLocalRequestFreeThreads、maxConnection

为了验证此设置,我在 ASP .NET 3.5 中有一个示例 Web 应用程序,在 page_load 事件中有以下代码:

        int w, c;

        ThreadPool.GetMinThreads(out w, out c);

        // Write the numbers of minimum threads
        Response.Write("Min: " + string.Format("{0}, {1}", w, c));

        w=0;
        c = 0;

        ThreadPool.GetMaxThreads(out w, out c);

        Response.Write(" Max: " + string.Format("{0}, {1}", w, c));

        Response.Write(" Maxconnections: " + ServicePointManager.DefaultConnectionLimit);

        Configuration conf = ConfigurationManager.OpenMachineConfiguration();
        ConfigurationSectionGroup secGrp = conf.SectionGroups["system.web"];
        ConfigurationSection sec = secGrp.Sections["httpRuntime"];
        Response.Write(" httpruntime settings: " + sec.ElementInformation.Properties["minFreeThreads"].Value + ", " +
                                                    sec.ElementInformation.Properties["minLocalRequestFreeThreads"].Value);

        Response.Flush();

当我首先运行将 autoConfig 设置为 false 然后设置为 true 的页面时,我得到以下输出:

autoConfig=false: Min: 2, 2 Max: 40, 40 Maxconnections: 10 httpruntime settings: 8, 4

autoConfig=true: Min: 2, 2 Max: 200, 200 Maxconnections: 24 httpruntime settings: 8, 4

autoConfig=false 按预期工作,并且可以在输出中看到默认值,但是设置为 true 时的输出让我有点吃惊:

  1. 它确实正确设置了 maxWorkerThreads 和 maxIoThreads 属性,因此输出为 200(双核 CPU 上为 100x2)。
  2. 但是,它似乎没有设置 minWorkerThreads 属性,根据 KB 应该是: minWorkerThreads = maxWorkerThreads/2
  3. 此外,根据 MSDN 文档设置 autoConfig=true 确实将 minFreeThreads 和 minLocalRequestFreeThreads 属性设置为 KB 中推荐的值,但似乎也并非如此。我得到默认值 8 和 4。

我有点困惑,关于这里发生了什么的任何想法?我是不是样品弄错了?

4

1 回答 1

0

我的猜测是您正在处理以下相同的逻辑:

WCF 4:WCF 服务的更高默认限制设置

在 WCF 4 中,我们修改了这些设置的默认值,以便人们在大多数情况下不必更改默认值。以下是主要变化:

· MaxConcurrentSessions:默认为100 * ProcessorCount

· MaxConcurrentCalls:默认为16 * ProcessorCount

· MaxConcurrentInstances:默认为以上两者之和,与之前的模式相同。

于 2011-08-25T02:49:26.277 回答