powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ускорить работу метода, C#
10 сообщений из 10, страница 1 из 1
ускорить работу метода, C#
    #38411096
Evgeniy_Aleksandrovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, данный метод очень медленно работает при key = 1000 и более... Как ускорить его работу с минимальными потерями? (В метода происходит зашифровывание текста(input) c ключом key)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
public String encrypt()
        {
            String tmp = null;

            list = new List<Char>();
             char[] array = input.ToCharArray();
            
                  int  t = 2 * key - 2;

                for (int i = 0; i < input.Length; i++)
                
                    if (i % t == 0)
                    {
                        list.Add(array[i]);
                        
                    } first_size = list.Count;
               
            
                for (int j = 1; j < key-1; j++)
                {
                   list.Add(array[j]);
                 
                    for (int i = 1; i < input.Length / t + 2; i++)
                    {
                        try
                        {
                            list.Add(array[j + (i * t - 2*j)]);

                        }
                        catch (IndexOutOfRangeException ext) { break; }
                        try
                        {
                            list.Add(array[j + i * t]);
                            
                        }
                        catch (IndexOutOfRangeException loof) { break; } 
                        
                    }
                }
                   
                for (int i = 0; i < input.Length; i++)

                    if (i % t == 0)
                    {
                        try
                        {
                            list.Add(array[i + (key - 1)]);
                          
                        }
                        catch (IndexOutOfRangeException exp) { break; }
                    }
           
                for (int j = 0; j < list.Count; j++)
                {
                    tmp += list.ElementAt(j).ToString();
                }
            
                    list.Clear();
                    
            return tmp;
        }
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38411524
sld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sld
Гость
после каждого цикла поставить вывод временных меток и оценить где тормозит, далее по факту
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38411800
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeniy_Aleksandrovich,

Код: c#
1.
catch (IndexOutOfRangeException ext) { break; }


Програмист это написать не мог. Студенту на первый раз разяснить.
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417466
RomanH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeniy_Aleksandrovich,

можно еще заюзать Parallel.For или Parallel.Foreach
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417471
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeniy_AleksandrovichКак ускорить его работу с минимальными потерями?
Как вариант - использовать шифр Виженера : быстро и компактно.
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417496
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Evgeniy_AleksandrovichЗдравствуйте, данный метод очень медленно работает при key = 1000 и более.
Чел, обработка исключения это дорогая операция с точки зрения вычислений.
Надо вообще от нее отказаться и перейти к проверкам которые просто проверят
что индекс элемента больше array.size. Да и вообще... что это за метод такой?
Сам изобрёл?
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417588
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronEvgeniy_Aleksandrovich,

Код: c#
1.
catch (IndexOutOfRangeException ext) { break; }


Програмист это написать не мог. Студенту на первый раз разяснить.
так потому и тормозе, что при большом key постоянно ексепшины генерятся а потом игнорятся, почему просто не проверять размер массива и текущий индекс, нахера допускать IndexOutOfRangeException

да и если есть возможность вычислить максимально возможное число элементов в list, то нужно заменить его на list = new char[max]
и уже работать с созданым массивом инициализируя его элементы, вместо list.Add просто делая list[++index]
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417591
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще в дотнете есть полно промышленных алгоритмов шифрования из коробки
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38417594
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanHEvgeniy_Aleksandrovich,

можно еще заюзать Parallel.For или Parallel.Foreach
можно еще распараллелить эти 3 блока, с последующей склейкой результата, они вроде как независимые
...
Рейтинг: 0 / 0
ускорить работу метода, C#
    #38420707
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
sldпосле каждого цикла поставить вывод временных меток и оценить где тормозит, далее по факту

Профайлер? Нет, не слышал
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / ускорить работу метода, C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]