Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
1

Оптимизация кода

12.10.2016, 14:15. Показов 1631. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть кусок кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 public static void NOCH (object source, ElapsedEventArgs e)
        {
            try
            {
                string chitawlf = EVL.GetString("Noch1");
                VKObjects.Wall w=VkAPI.Wall.get("-42954445", 2, Program.token)[1];
                string one = w.id;
                if(chitawlf!=one)
                {
                    Console.WriteLine("ПЕРВАЯ ЗАПИСЬ: "+one+" я не читала её");
                    chitawlf=one;
                    VkAPI.Wall.addComment("-42954445", one, ChatBrain.InTextA("piar"), Program.token);
                }
                one=null;
                w=null;
                EVL.SetString("Noch1", chitawlf);
                NOCH2();
            }
            catch(Exception ex)
            {
                Debug.Error(ex.ToString(), "NOCH");
            }
        }
Как можно его максимально оптимизировать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2016, 14:15
Ответы с готовыми решениями:

Оптимизация кода
Можно ли это как то оптимизировать? public void Vn_Method(int a,ref Button btn1, ref Button btn2,...

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

Оптимизация кода
Добрый. Помогите пожалуйста оптимизировать следующий участок кода: public static int...

Оптимизация кода
Описание задачи: В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного...

9
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
12.10.2016, 14:26 2
elektro-volk, оно долго работает? Оно потребляет много памяти? Тут есть утечки? Зачем это оптимизировать понадобилось?
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
12.10.2016, 14:27  [ТС] 3
Работаю долгое время на С#, но чую, что в оптимизации я слаб, решил попросить опыта у прокуренных мастеров, можно ли оптимизировать такой кусок кода, может новому научусь
0
18 / 23 / 18
Регистрация: 13.05.2016
Сообщений: 227
12.10.2016, 16:36 4
Цитата Сообщение от elektro-volk Посмотреть сообщение
Работаю долгое время на С#, но чую, что в оптимизации я слаб, решил попросить опыта у прокуренных мастеров, можно ли оптимизировать такой кусок кода, может новому научусь
Выше написали, смысл искать, что нужно оптимизировать, если все работает нормально и нету утечек
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
13.10.2016, 02:41  [ТС] 5
Программа работает круглосуточно, и надо привести даже мелкие затраты к минимуму
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
13.10.2016, 07:16 6
elektro-volk, судя по одному только этому методу, могу сказать, что твоей программе не оптимизация требуется, а рефакторинг. Причём капитальный:

* почему метода статичный, но явно имеет состояние? Если метод имеет состояние, то это обычный метод обычного класса, а не статика.
* почему метод, работающий с удалённой службой (ВК) при этом что-то пишет в консоль? Один метод решает одну задачу.
* почему везде строковые литералы, да ещё и повторяющиеся? Вынеси строки и "магические числа" в константы.
* что за названия у сущностей? NOCH, chitawlf, EVL, w, one. Ты сам вспомнишь, что это значит через месяц? А мне, как стороннему человеку, это непонятно уже сейчас. Давай осмысленные имена сущностям. Всегда.

Ну и по мелочи:
* явно присваивать null локальным переменным не нужно - GC довольно умён, чтобы впалить, что переменные тебе не нужны.
* зачем ты делаешь так: chitawlf=one, если потом просто передаёшь chitawlf как аргумент? Можно было бы сразу передавать one.

Как-то так.

Добавлено через 19 минут
На последнее (про chitawlf=one) можешь забить, я тупанул не увидев условие chitawlf!=one
0
0 / 0 / 2
Регистрация: 11.12.2015
Сообщений: 47
13.10.2016, 10:41  [ТС] 7
1) Что значит магические числа
2) Как это понять состояние
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
13.10.2016, 10:49 8
Цитата Сообщение от elektro-volk Посмотреть сообщение
Что значит магические числа
Числа, которые творят волшебство, неведомое никому, кроме волшебника, например: -42954445. Что это, зачем, что обозначает?
Цитата Сообщение от elektro-volk Посмотреть сообщение
public static void NOCH (object source, ElapsedEventArgs e)
Похоже, что это обработчик срабатывания таймера. Почему оно статическое - не понятно.
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,595
13.10.2016, 11:10 9
Цитата Сообщение от elektro-volk Посмотреть сообщение
2) Как это понять состояние
Это значит, что логика метода опирается на вещи, которые ему не были переданы в виде аргументов и которые этот метод может менять во время своей работы (можно сказать, что неявные побочные эффекты). В данном случае это Program.token, EVL и VkAPI. И если первое - используется просто для чтения, то EVL и VkAPI меняются во время работы данного метода. Последующий вызов EVL.GetString("Noch1"); уже не вернёт тоже самое, что и предыдущий. В данном случае, состояние класса, в котором находится метод NOCH, размазано по эти трём вещам.

Рекомендую создать обычный класс, в конструктор которого передать token и ссылки на эти две штуки (EVL и VkAPI). Это изолирует всю эту возню (что бы тут не происходило) в отдельном экземпляре класса. Таких экземпляров, если нужно, можно будет создать произвольное количество. Так можно будет организовать управление несколькими учётными записями/ботами из одного процесса (если тут именно это и происходит).

Вообще, использовать статические методы можно только для выноса небольшого утилитарного кода, который по логике вещей, больше никуда не притулить. Это тебе не Си.
0
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
13.10.2016, 11:49 10
elektro-volk, Замерьте время между вызовами: для поиска наиболее долго выполняемых инструкций нужно искать по методу, меняя начало и конец для замера.
Заранее могу предположить, что все дело в получении данных из ВК, т.к. циклов у вас нет, рекурсии тоже нет. Возможно через прокси медленно работает загрузка данных.
0
13.10.2016, 11:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2016, 11:49
Помогаю со студенческими работами здесь

Оптимизация кода
Здравствуйте, не знаю, по теме или нет, если нет - перенесите! Хотел поинтересоваться у Вас насчет...

Оптимизация кода
Console.WriteLine("Нажми Enter для старта..."); // баги: 1. после вывода примера если нажать enter...

Оптимизация кода
Добрый день! Может ли кто-нибудь подсказать, возможна ли оптимизация (сокращения строк, без...

Оптимизация кода
всем привет, написал простенькую программу, где надо совершать арифметические действия до...

Оптимизация кода
Здравствуйте. Имею такую задачу: проходиться по коллекции файлов, и проводить фильтр по...

Оптимизация кода
Возможно ли заменить быдло-код проверки - пуста ли строка и появления картинки возле неё? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru