Никаких преимуществ от C # интенсивной программы? - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь увидеть разницу в производительности между следующими двумя программами (ожидал).Но я не вижу разницы.Это нормально?Я работаю на Windows Core 2 Duo M / C Visual Studio 2010 Express Edition

Программа 1 (в среднем более 100 запусков: 824,11 мс):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;


namespace MultiThreading
{
    class Program
    {
        public static Stopwatch stopwatch;
        static void Main(string[] args)
        {
            stopwatch = new Stopwatch();
            stopwatch.Start();
            //Thread t = new Thread(WriteY);
            //t.Start();
            for (int i = 0; i < 10000; i++)
            {
                Console.Write("x{0} ", i);
            }

            WriteY();

            Console.WriteLine("Time taken in milliseconds: {0}", stopwatch.ElapsedMilliseconds);
            Console.ReadLine();
        }

        static void WriteY()
        {
            for (int i = 0; i < 10000; i++)
            {
                Console.Write("y{0} ", i);
            }
            //Console.WriteLine("Time taken in milliseconds: {0}", stopwatch.ElapsedMilliseconds);
            //Console.ReadLine();
        }

Программа 2 (в среднем более 100 запусков: 828,11 мс):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;


namespace MultiThreading
{
    class Program
    {
        public static Stopwatch stopwatch;
        static void Main(string[] args)
        {
            stopwatch = new Stopwatch();
            stopwatch.Start();
            Thread t = new Thread(WriteY);
            t.Start();
            for (int i = 0; i < 10000; i++)
            {
                Console.Write("x{0} ", i);
            }

            //WriteY();

            Console.WriteLine("Time taken in milliseconds: {0}", stopwatch.ElapsedMilliseconds);
            Console.ReadLine();
        }

        static void WriteY()
        {
            for (int i = 0; i < 10000; i++)
            {
                Console.Write("y{0} ", i);
            }
            //Console.WriteLine("Time taken in milliseconds: {0}", stopwatch.ElapsedMilliseconds);
            //Console.ReadLine();
        }
    }
}

Ответы [ 2 ]

8 голосов
/ 06 января 2012

Я предполагаю, что оба ограничены скоростью Console.Write, которая, предположительно, должна блокировать ресурс (экран), чтобы к нему одновременно мог обращаться только один поток.

4 голосов
/ 06 января 2012

Проблема в том, что ваше приложение связано с вводом-выводом, потому что вы все время используете Console.WriteLine.Если вы делаете что-то, что не использует IO, вы увидите повышение.

И, как уже упоминалось в другом ответе, WriteLine действительно синхронизируется: Вызов Console.WriteLine из нескольких потоков

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