Что нового

[Процессы] Как ускорить работу программы?

Статус
Закрыто для дальнейших ответов.

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sims,
Наш форум посвящен языку AutoIt. Не надо в дальнейшем переводить код на другой язык, особенно в этом разделе.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
madmasles, ок.
Примеров доно много. Думаю тему можно считать решенной.
 

sims

Осваивающий
Сообщения
184
Репутация
24
forfrends [?]
Пример написан на Си++?
Это PureBasic.

Какой язык посоветуете?
Подойдут многие компилируемые, например Си/С++, Дельфи и т. д.


madmasles [?]
sims,Наш форум посвящен языку AutoIt. Не надо в дальнейшем переводить код на другой язык, особенно в этом разделе.
Согласен с вами, но как я понял, нужна максимальная скорость выполнения и AutoIt в этом плане проигрывает многим компилируемым ЯП.
Если forfrends важна скорость работы, то наверное ему нужно создать тему в другом разделе с вопросом о выборе более подходящего ЯП под эту задачу.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
forfrends [?]
дальше не пробовал тенденция понятна. + кушает ОЗУ, так как создается в памяти масив со всеми комбинациями, и лишь в конце записывается в файл.
1. Я бы сказал так: я написал некий алгоритм, один из способов как это сделать используя свою идею. Писать сразу в файл никто не запрещал, вместо присоединения в переменную выполняете FileWrite.
2. Я нашёл код inx несовершенным, незнание как работает StringSplit без разделителя, использование Dim, которое в 99% не должно использоваться вообще в скриптах. А также странное использование рекурсивного вызова ради каждого символа, при этом каждый раз проверять его длину, не проще ли в цикле задать длину, чтобы не делать пустых ходов.
3. Красота алгоритма - подстраиваться под язык программирования. На другом языке возможно тоже самое пришлось бы делать совершенно иным способом. Возможно некоторую нагрузочную работу переложить на внутренний движок интерпретатора, потому что реализация этого же алгоритма кодом AutoIt3 будет медленнее в 10 раз, из-за одной только проблемы скорости интерпретации.
4. Я сделал универсально, то есть задавать размеры можно заранее. Это накладывает вычислительные процессы внутри цикла. Естественно задав жёсткие значения можно ускорить немного цикл.


Ещё пару вопросов:
1. Зачем сохранять в файл? Не проще ли ковать железо не отходя от кассы?
2. Если количество символом менее 10, то можно тупо записать числа, добавляя 1 в цикле, а потом сделать 10 раз StringReplace, заменив цифры на нужные символы по позициям.
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
AZJIO
А чем вам не нравиться этот код? ;)
Код:
 static void Main(string[] args)
        {
            Stopwatch sW = new Stopwatch();
            sW.Start();
            Test();
            sW.Stop();
            Console.WriteLine("Всё");
            Console.WriteLine(sW.ElapsedMilliseconds.ToString());
            Console.ReadLine();
        }
        static int Test()
        {
            int[] data = new int[30];
            for(int i=0;i<data.Length;i++)
            {
                data[i] = 0;
            }
            //string[] basesim = { "a", "b", "c" };
            string[] basesim = new string [100];
            int t = 0;
            
            while (true)
            {
                t++;
                if (t > 150000000)
                {
                    break;
                }
                //Console.WriteLine(basesim[data[0]] + " " + basesim[data[1]] + " " + basesim[data[2]] + " " + basesim[data[3]]);
                //Console.WriteLine(data[0] + " " + data[1] + " " + data[2] + " " + data[3] + " " + data[4] + " " + data[5] + " " + data[6] + " " + data[7] + " " + data[8] + " " + data[9]);
                //Console.ReadKey();
                for (int i = 0; i < data.Length; i++)
                {
                    if (data[i] == basesim.Length - 1)
                    {
                        if (data.Length == i +1)
                        {
                            return 0;
                        }
                        data[i] = 0;
                    }
                    else
                    {
                        data[i]++;
                        break;
                    }
                }
            }
            return 1;
        }
 
Статус
Закрыто для дальнейших ответов.
Верх