PDA

Просмотр полной версии : [Помогите!] C# Быстрая генерация чисел


xFroLx
11.10.2010, 15:29
Помогите пожалуйста с кодом, как ускорить процесс генерации чисел (например от 1 до 100 000), делаю через цыкл for: for(int i = 0; i<100 000; i++)


это делается оч долго((( подскажите плиз как ускорить процесс:rolleyeyes:

Рэйзор
11.10.2010, 15:35
Помогите пожалуйста с кодом, как ускорить процесс генерации чисел (например от 1 до 100 000), делаю через цыкл for: for(int i = 0; i<100 000; i++)


это делается оч долго((( подскажите плиз как ускорить процесс:rolleyeyes:

эмм а что тут оптимизировать?) быстрее ток на ассемблере, да и то не особо.
если интересует вот немного материала по генерации строк - код на делфи, но думаю все и так понятно: _[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Добавлено через 6 минут
Собственно цикл for работает в 3 такта, быстрее ты никоим образом не исхитришься сделать.

xFroLx
11.10.2010, 16:01
эмм а что тут оптимизировать?) быстрее ток на ассемблере, да и то не особо.
если интересует вот немного материала по генерации строк - код на делфи, но думаю все и так понятно: _[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Добавлено через 6 минут
Собственно цикл for работает в 3 такта, быстрее ты никоим образом не исхитришься сделать.

так ViLKaa сделал) и все работает оч быстро, а у мя оч медленно ((

Рэйзор
11.10.2010, 16:04
ты чего то сделал)
даже на стареньком компе цикл от 1 до 100к выполнится за 0.1с
кинь полный код.

xFroLx
11.10.2010, 16:04
ты чего то сделал)
даже на стареньком компе цикл от 1 до 100к выполнится за 0.1с
кинь полный код.

В личку) ща)

Добавлено через 4 минуты
кинул)

Добавлено через 1 час 23 минуты
П.С. Вопрос еще в силе

gogorus
11.10.2010, 21:22
Кинь полный код, вроде бы должно генерироваться быстро даже если рандомить.

Kitsune
12.10.2010, 10:22
static void Main(string[] args)
{
HiPerfTimer timer = new HiPerfTimer();
Random rnd = new Random();

int arrayLength = 100000;

int[] array = new int[arrayLength];

timer.Start();
for (int i = 0; i < arrayLength; i++)
array[i] = rnd.Next();
timer.Stop();

Console.WriteLine(String.Format("{0} ms", timer.Duration));
Console.ReadKey();
}

З.Ы. Класс HiPerfTimer у себя не ищите. Он самописный.

Результат:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]******.net/storage/10/1/0/8/7/upload/8ba3befc.png


Я не думаю, что две тысячные секунды - это больше время для генерации 100 000 случайных числе и запись их в массив.

xFroLx
13.10.2010, 08:33
Да я сам тупанул) прост у меня числа генились в rich tex box е))) я сделал через текстовик)

через текстовики тоже долговато, можете подсказыть(я ваще новичёк в этом деле)

Вот мне надо сгенить числа (от 1 до 100к допустим) и вставит результат в текст бокс... как эт сделать.. я раньше делал вот так

for (int i = 0; i < 100; i++)
{
richtextbox1.Text += "2C"+i;
Application.DoEvents();
}


но это долго

Leo_ня
13.10.2010, 09:14
Если хочешь быстрее — создавай сначала в памяти цифры, а после создания записывай все сразу.

Жрёт память. Но быстрее некуда.

Можно записывать по несколько мегабайт (если цифр много, чтобы память не жралась сильно).

xFroLx
13.10.2010, 09:16
Если хочешь быстрее — создавай сначала в памяти цифры, а после создания записывай все сразу.

Жрёт память. Но быстрее некуда.

Можно записывать по несколько мегабайт (если цифр много, чтобы память не жралась сильно).

я так и хочу сделать, но незнаю как(

Kitsune
13.10.2010, 10:33
Random rnd = new Random();

int arrayLength = 100000;

int[] array = new int[arrayLength];

for (int i = 0; i < arrayLength; i++)
array[i] = rnd.Next();

StringBuilder sb = new StringBuilder();
foreach (int i in array)
sb.AppendFormat("2C{0}\n", i);

richTextBox1.Text = sb.ToString();

xFroLx
16.10.2010, 22:54
TBX1n
А почему если я геню не с нуля... а например с 10 по 5000, то вначале появляются 10нуле.. а ток потом идут числа

Kitsune
17.10.2010, 13:24
rnd.Next(10, 5000);

Не вижу нулей...

xFroLx
17.10.2010, 14:32
rnd.Next(10, 5000);

Не вижу нулей...

да мне не рандомные числа над... а когда генишь с 5 до 500, вначале появляются 5 нулей а потом числа

Nickitee
17.10.2010, 23:00
в цикл или таймер ставиш:
int chislo = 500;
chislo++;
И записываем куда надо...

Kitsune
18.10.2010, 11:34
xFroLx, код в студию, я не бабка гадалка, чтобы по кофейной гуще узнать, что у тебя не так.