Возможность сетевого подключения используется не полностью, почему? - PullRequest
0 голосов
/ 13 октября 2009

Я использую следующий код, чтобы попытаться проверить, увеличится ли потребление сети (отслеживается на вкладке «Сеть» диспетчера задач), если я увеличу число одновременных соединений (т. Е. Значение конфигурации приложения ClientCount). Но я нахожу, что даже если я увеличу количество клиентов со 100 до 500, потребление сети останется прежним (около 3% -4%, как со стороны клиента, так и со стороны сервера). Есть идеи, что не так? Я хочу доказать, что при одновременном увеличении числа клиентов со стороны клиента потребление сети клиентом и сервером будет увеличиваться.

Вот мой конфиг приложения и код на стороне клиента. URL-адрес представляет собой файл wmv, размещенный в элементе управления скоростью передачи данных IIS 7.0 на другом компьютере в локальной сети. Я использую 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;
    }
}

1 Ответ

1 голос
/ 13 октября 2009

Может быть, существует ограничение на максимальное количество одновременных вызовов на сервере, вы можете это проверить? Некоторые серверы позволяют, например, 10 параллельных соединений (или фактически они также могут быть однопоточными только с 1 одновременным вызовом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...