Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2013, 14:34   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Как вывести список ?

Уважаемые, как лучше вывести список ?
Код:
int x = 15;
            for (int q = 0; q < x; q++)
            {
                for (int w = 0; w < x; w++)
                {
                    for (int e = 0; e < x; e++)
                    {
                        for (int r = 0; r < x; r++)
                        {
                            Global.a += q + "." + w + "." + e + "." + r + Environment.NewLine;
                        }
                    }
                }
            }
Вывожу через таймер с значением 100, машина просто вешается, я уже и не говорю, если скажем значение "х" выше задрать ...

Код:
0.0.0.0
0.0.0.1
0.0.0.2
0.0.0.3
0.0.0.4
.....
14.14.14.14

Последний раз редактировалось L6go1as; 17.08.2013 в 14:37.
L6go1as вне форума Ответить с цитированием
Старый 17.08.2013, 15:38   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

А куда вы его собираетесь выводить?
Чем не устраивают банальные варианты типа

Код:
static void Main(string[] args)
        {
            const int MAX_VALUE = 15;
            Enumerable.Range(0, MAX_VALUE).ToList().ForEach(a =>
            Enumerable.Range(0, MAX_VALUE).ToList().ForEach(b =>
            Enumerable.Range(0, MAX_VALUE).ToList().ForEach(c =>
            Enumerable.Range(0, MAX_VALUE).ToList().ForEach(d => Console.WriteLine("{0}.{1}.{2}.{3}", a, b, c, d)))));
            Console.ReadKey();
        }
?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 17.08.2013, 15:52   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Вывожу через форму, а именно тексбокс.

Тут больше вопрос, как вывести все значения без зависания программы, скажем по 500 строк одновременно.
Если выводить весь возможный диапазон, то это конечно же дофига (4 228 250 625) строк, но все же ...
L6go1as вне форума Ответить с цитированием
Старый 17.08.2013, 16:27   #4
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
--------delete
Зря удалил совет, он помог!

Через StringBuider - за 4077 мс смог вывести 6 250 000 строк.

Однако повышая градус, выбивает с исключением по памяти ...
Думаю стоит обратиться к многопотокам и разложением между потоками данную задачу.

Последний раз редактировалось L6go1as; 17.08.2013 в 16:38.
L6go1as вне форума Ответить с цитированием
Старый 17.08.2013, 19:20   #5
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Думаю стоит обратиться к многопотокам и разложением между потоками данную задачу.
Это не отменит OutOfMemoryException

Может стоит пойти иным путем?
Например, не держать в памяти все эти строки, а вычислять только необходимые, которые будут видны на экране?

Рассчитать N-й член этой последовательности, емнип, можно так:
Код:
  // itemNumber is zero-based
        private static void Calculate(int itemNumber)
        {
            int d = itemNumber % MAX_VALUE;
            int c = itemNumber / (MAX_VALUE);
            int b = itemNumber / (MAX_VALUE * MAX_VALUE);
            int a = itemNumber / (MAX_VALUE * MAX_VALUE * MAX_VALUE);

            if (c >= MAX_VALUE) c = c % MAX_VALUE;
            if (b >= MAX_VALUE) b = b % MAX_VALUE;
            if (a >= MAX_VALUE) a = a % MAX_VALUE;
            Console.WriteLine("{0}.{1}.{2}.{3}", a, b, c, d);
        }
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 17.08.2013, 21:01   #6
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Это не отменит OutOfMemoryException

Может стоит пойти иным путем?
Например, не держать в памяти все эти строки, а вычислять только необходимые, которые будут видны на экране?
Я тоже об этом думал, но как реализовать не знаю ... Зелен еще ...
Лучше подскажи, в чем подвох:

Код:
for (int i = 0; i < Global.ThreadCounter; i++)
            {
                threads = new Thread[(int)Global.ThreadCounter]; //без этого не получается контролировать кол-во потоков.
                threads[i] = new Thread(Tests);
                threads[i].Start();
            }
            Tests();
Без выделенной части код не работает вообще.
Если заменить часть кода после (int) просто цифрой, то код работает, но цифру не воспринимает ...

Собственно, что данный код значит ? Можно ли без него обойтись ?
L6go1as вне форума Ответить с цитированием
Старый 17.08.2013, 22:56   #7
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Собственно, что данный код значит ? Можно ли без него обойтись ?
оно в куче потоков выполняет метод Tests()

Обойтись без него можно и нужно. Например, с помощью ThreadPool

Хотя мне больше нравится Parallel LINQ
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 18.08.2013, 05:17   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если в панели, то никак. Если пишете в Билдере, могу подсказать:
Код:
__fastcall TFormMain::TFormMain(TComponent* Owner)
	: TForm(Owner)
{
    Application->OnIdle = IdleLoop;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::IdleLoop(TObject*, bool &done)
{
done = false; // Иначе будет реагировать на движение курсора по форме.
  // Чё хотим, то и делаем
}
Не забываем прописывать функцию в заголовочном файле .
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 18.08.2013 в 05:21.
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.08.2013, 13:31   #9
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Код:
for (int i = 0; i < Global.ThreadCounter; i++)
            {
                threads = new Thread[(int)Global.ThreadCounter]; //без этого не получается контролировать кол-во потоков.
                threads[i] = new Thread(Tests);
                threads[i].Start();
            }
            Tests();
А зачем эта строчка в цикле?
Может лучше вот так?
Код:
int __N = (int)Global.ThreadCounter;
            threads = new Thread[__N]; 

            for (int i = 0; i < __N; i++)
            {
                threads[i] = new Thread(Tests);
                threads[i].Start();
            }
            Tests();
Lime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести список файлов в текстовый файл assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 20.12.2010 22:36
Как вывести список ссылок trad Общие вопросы C/C++ 0 14.12.2010 15:23
Как вывести список контактов? Timon779 Помощь студентам 0 16.07.2010 14:17
Как вывести список стандартных библиотек Windows Бутаков_Сергей Общие вопросы Delphi 4 15.11.2009 21:30
Как в Memo1 вывести список папок? apromix Общие вопросы Delphi 1 08.05.2008 15:12