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

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

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

Сообщение PUNK-GRUNGER » 29.01.2006 (Вс) 14:49

Собссно сабж. Какие есть хитрые идеи? Чтобы увеличить скорость, уменьшить потребляемые ресурсы и т.д. Может кто что подскажет?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 29.01.2006 (Вс) 15:31

Не юзать .Net.
Ну и с завидной регулярностью запускать "сборщик мусора".
Ну, кстати там .Net сам оптимизирует. По мере сил.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 29.01.2006 (Вс) 18:36

ANDLL
Дык если сборщик мусора запускать, то скорость падает :cry: .

PUNK-GRUNGER
Очень сильно зависит от ситуации. Вроде уже и не "начинающий", а такие вопросы задаешь.
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 29.01.2006 (Вс) 19:43

mdx писал(а):ANDLL
Дык если сборщик мусора запускать, то скорость падает :cry: .

Зато память растет!
Ну иногда еще можно юзать IDisposable, но это сильно зависит от архитектуры прриложения.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

mdx
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 169
Зарегистрирован: 06.01.2006 (Пт) 18:13
Откуда: I'm from Russia!

Сообщение mdx » 29.01.2006 (Вс) 19:46

По-моему, IDisposable можно юзать в любом классе (если, конечно, в нём не всё Shared)
This posting is provided "AS IS" with no warranties, and confers no rights.

Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 29.01.2006 (Вс) 20:49

Ясное дело что никто не заприщает. Но это еще не значит что его надо бездумно сувать везде
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.01.2006 (Вс) 22:53

Оптимизировать надо конкретный код.

Сборку нужно запускать, только когда вы точно знаете зачем.
Я таких случаев незнаю.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 30.01.2006 (Пн) 11:55

тоже задавался таким вопросом.
использую IDisposable, стараюсь следить за тем, чтобы нужные объекты уничтожались вовремя, было поменьше циклов, поменьше переменных.
и между ног затеплилась надежда
(%

http://grunger.net.ru

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 30.01.2006 (Пн) 12:41

mdx писал(а):ANDLL
PUNK-GRUNGER
Очень сильно зависит от ситуации. Вроде уже и не "начинающий", а такие вопросы задаешь.


Дык, меня интересует конкретно вопрос оптимизации в .NET. Я же спрашивал про хитрые идеи. Я сам накрутил очень много всего: пишу контрол, в котором есть около 50 стационарынх объектов, которые должны, относительно размеров контрола изменять свое месторасположение. Т.е. Resize. Выяснилось, что Resize вызывается дважды, поэтому я изменил код функции NEW(), на следующее Function Sub NEW (Byref ControlSize as Size), т.е. я сразу передаю во время создания размеры, чтобы поменьше времени уходило на расчет Resize... Вот я в этом плане имел в виду. Может кто то еще знает какие-то штуки, до которых я не додумался.

Как я оптимизирую:
* юзаю ByRef И ByVal;
* убиваю переменные не нужные;
* часто используемые значения завожу в Паблик, т.е. у меня часто используется размер 16 на 16 и чтобы всегда не объявлять новый New Size, юзаю один, объявленные в пабликах;
* особый контроль циклов;
* контроль задач и потоков, т.е. редко используемые функции убираю, а вызываю когда Optional ByVal ChtoToTam as Boolean = True
* некоторые функции, работающие с контролом, перенес в Паблик и вызываю его по ссылке на объект;

и т.д. и т.п.

Скорость увеличил почти в два раза, ресурсы жрет минимум, но все равно как-то работает как каракатица. Задача у меня такая - есть контрол (usercontrol), в котором около 50 других контролов (тоже usercontrol'ов), у каждого их них есть большой Resize, Paint, Таймер, еще кое-какие функции и десяток переменных (из них два массива Io.DirectoryInfo и Io.FileInfo).

Меня интересует секреты юзверя, а не _общие_ вопросы оптимизации... может кто -то может поделиться.

А про "вроде уже не начинающий" - в нашем деле даже ламер может найти интересный ответ. Все зависит от вопроса :)

Никто не поделиться? ;)

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 30.01.2006 (Пн) 12:44

И еще во время создания одного из 50 контролов работает цикл от 0 до N (N в зависимости от продолжительности работы может скакать от 10 до 1000).

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 30.01.2006 (Пн) 15:25

PUNK-GRUNGER писал(а):Как я оптимизирую:
* особый контроль циклов;



а можно поподробней?
и между ног затеплилась надежда
(%

http://grunger.net.ru

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 31.01.2006 (Вт) 14:17

Кто может подсказать как можно по умному прикрепить многопоточность к исходнику? :) Просто никогда не юзал Thread'ы эти... покопался на форуме, нашел пример, вроде понятно :) Даже не обычно что ли... это там где MessageBox'ы в цикле обрабатываются и одновременно вылазеют :) Но как это прикрутить к контролу? Может кто подскажет?

И еще... On Error Resume Next - тоже убавляет скорости? В домашних лабораторных условиях разница не сильно большая... Вот сижу думаю, чтобы и от этого избавится.

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 31.01.2006 (Вт) 14:24

Только что еще кое-что нашел: при динамическом изменении массива - лучше использовать увеличение емкости не на единицу, а сразу на несколько порядков. Т.к. при Redim Preserve - весь массив копируется, то и тактов требуется по более, и времени не мало. Относительно конечно.

Нууу... хоть какие то идеи еще есть у кого то? :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 31.01.2006 (Вт) 15:08

Да. К примеру можно перестать заниматься ерундой и начинать писать программы. Многопоточность скорость не увеличивает... По крайней мере на однопроцессорных системах.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 31.01.2006 (Вт) 17:04

Злое ты.

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 02.03.2006 (Чт) 11:12

Интересная тема, раскажите больше про сборщик мусора, плз
Мне вот не понятен до его принцип работы, что он делает киляет переменные которые вышли из области видимости, или что.

Кстати, по породу примера с окошками и процессами, у меня так и неполучилось, коректно!, из процесса передовать данные обратно в программу, возникает ошибка (ксати она там рядом с примером тоже была написана), ни кто не ответил что это за ошибка и от куда она береться, по мойму она возникает когда 2 или больше процесса обращаються к одному элементу управления...
но она возникает не всегда..
т.е. без болезнено у меня получилось запустить только тот процесс который не возвращал ни какие данные..

minotawr
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 195
Зарегистрирован: 08.01.2006 (Вс) 12:38
Откуда: Курск

Сообщение minotawr » 02.03.2006 (Чт) 11:35

Еще один способ, присваивать объекты переменным, а уже потом работать с переменными, а не с объектами. Хотя возможно это и общеизвестно...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.03.2006 (Чт) 12:07

VAngel писал(а):Интересная тема, раскажите больше про сборщик мусора, плз
Мне вот не понятен до его принцип работы, что он делает киляет переменные которые вышли из области видимости, или что.

Именно это.

VAngel писал(а):Кстати, по породу примера с окошками и процессами, у меня так и неполучилось, коректно!, из процесса передовать данные обратно в программу, возникает ошибка.

"процессы" -- это ты так нити, они же потоки, своеобразно называешь?
Изображение

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 02.03.2006 (Чт) 12:58

2 tyomitch
да
просто запутался немного

baha76
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 07.01.2004 (Ср) 10:59
Откуда: Ташкент

Сообщение baha76 » 02.03.2006 (Чт) 14:38

Думаю, что начинать надо с анализа требований к программе.
Если с самого начала выбрать правильный путь разработки, то вопрос оптимизации потеряет актуальность.
По этому поводу советую изучить UML. Литературы достаточно имеется.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList