Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Оптимизация программы


Автор: Silent 17.8.2011, 15:09
Добрый день!

Есть задача вывода в стандартный поток 10^6 символов за минимально возможное время. Мое решение:
Код

namespace Task_CSharp
{
    class myTask
    {
        const int N = 1000000;
        static System.Random r = new System.Random();
        static char[] buf = new char[N];

        static void Main()
        {
            for (int i = 0; i < N; i++) buf[i] = (char)(97 + r.Next(26));
            System.Console.Write(buf, 0, N);
        }
    }
}

Время выполнения - 0.093 секунды, а занимаемая память - 3 852 КБ.

Как оптимизировать данный код в сторону ускорения быстродействия/уменьшения занимаемой памяти?

Автор: jonie 17.8.2011, 18:35
вы уже прошлись профайлером и определили горячие точки, не так ли?

Автор: Silent 18.8.2011, 09:36
Цитата(jonie @  17.8.2011,  18:35 Найти цитируемый пост)
вы уже прошлись профайлером и определили горячие точки, не так ли? 

нет, профайлером я не проходил, можно считать меня полным нубом в этой области - C#-знаний у меня практически нет.
к тому же, как мне в данной ситуации поможет профайлер? Результатом должен быть мегабайтный блок данных в стандартном потоке вывода, и ключевые моменты C#, которые мне бы хотелось узнать - это есть ли альтернативы используемым методам? Например, под массив buf уходит 2Мб (юникод), Console.Write() принимает только массив char'ов, и выводит с преобразованием к текущей кодировке операционной системы. А мне бы буфер в 1Мб (который рассматривался бы просто как массив байт) скинуть чем-нибудь побыстрее Console.Write();
Позволю привести код в С++:
Код

#include <stdio.h>

const int N = 1000000;
char buf[N];

void main()
{
    for (int i = 0; i < N; i++) buf[i] = (char)(97+26.0*rand()/RAND_MAX);
    fwrite(&buf, 1, N, stdout);
    fclose(stdout);
}

и размер буфера 1Мб, и скидываем "как есть"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)