【问题标题】:network connection capability is not fully used, why?网络连接能力没有得到充分利用,为什么?
【发布时间】:2016-12-30 04:04:00
【问题描述】:

我正在使用以下代码尝试测试如果我增加并发连接数(即 ClientCount 应用程序配置值),网络消耗(从任务管理器的网络选项卡监控)是否会增加。但是我发现即使我将客户端数量从 100 增加到 500,网络消耗仍然是相同的(大约 3%-4%,来自客户端和服务器端)。有什么想法有什么问题吗?我想证明如果从客户端并发数增加,客户端和服务器的网络消耗都会增加。

这是我的应用程序配置和客户端代码。该 URL 是托管在本地 LAN 中另一台计算机上的 IIS 7.0 比特率限制控制中的 wmv 文件。我正在使用 VSTS 2008 + C# + .Net 3.5 作为客户端开发控制台应用程序。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="1000000" />
    </connectionManagement>
  </system.net>
  <appSettings>
    <add key="URL" value="http://labtest2/test.wmv"/>
    <add key="ClientCount" value="100"/>
    <add key="Timeout" value="3600"/>
  </appSettings>
</configuration>

class Program
{
    private static int ClientCount = 100;
    private static string TargetURL = String.Empty;
    private static int Timeout = 200;

    static void PerformanceWorker()
    {
        Stream dataStream = null;
        HttpWebRequest request = null;
        HttpWebResponse response = null;
        StreamReader reader = null;
        try
        {
            request = (HttpWebRequest)WebRequest.Create(TargetURL);
            request.Timeout = Timeout * 1000;
            request.Proxy = null;
            response = (HttpWebResponse)request.GetResponse();
            dataStream = response.GetResponseStream();
            reader = new StreamReader(dataStream);

            // 1 M at one time
            char[] c = new char[1000 * 1000];

            while (reader.Read(c, 0, c.Length) > 0)
            {
                Console.WriteLine(Thread.CurrentThread.ManagedThreadId + ":\t" + c[0]);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
        }
        finally
        {
            if (null != reader)
            {
                reader.Close();
            }
            if (null != dataStream)
            {
                dataStream.Close();
            }
            if (null != response)
            {
                response.Close();
            }
        }
    }

    static void Main(string[] args)
    {
        TargetURL = ConfigurationSettings.AppSettings["URL"];
        ClientCount = Int32.Parse(ConfigurationSettings.AppSettings["ClientCount"]);
        Timeout = Int32.Parse(ConfigurationSettings.AppSettings["Timeout"]);
        Thread[] workers = new Thread[ClientCount];
        for (int i = 0; i < ClientCount; i++)
        {
            workers[i] = new Thread((new ThreadStart(PerformanceWorker)));
        }

        for (int i = 0; i < ClientCount; i++)
        {
            workers[i].Start();
        }

        for (int i = 0; i < ClientCount; i++)
        {
            workers[i].Join();
        }           

        return;
    }
}

【问题讨论】:

    标签: c# .net performance visual-studio-2008


    【解决方案1】:

    也许服务器上的最大并发调用有限制,你能检查一下吗?一些服务器允许例如10 个并行连接(或者实际上它们也可以是单线程的,只有 1 个并发调用)。

    【讨论】:

    • 服务器端检查的限制是什么意思? web.config 还是在 IIS 管理器中?
    • 我已经在 IIS 7 for Windows Server 2008 上尝试过它工作正常。但是在 Windows 7 的 IIS 7 上,它有问题,为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多