Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > chto rabotaet bystree?


Автор: polosatij 10.11.2004, 19:15
narod.. chto rabotaet bystree?

Код

 boolean a1, a2, a3, a4...=false, true, false, false...;
 if (a1 || a2 || ...) {return;}


ili

Код


for (int i=0; i<=(kolichestvoPeremennyh=20); i++) {
  if (peremennaja[i]) {return;}
}



smile

prichem u menja peremennyh primerno 20.. i mozhno i tak i etak.. no poskol'ku zagruzka prozessora prosto podletela v poslednee vremja, nado optimirovat'..

probegaet li on v pervom sluchae vse peremennye? a1, a2, a3 i t.d.? ved', kak izvestno vse vyrazhenie mozhno opredelit' esli uzhe v pervyh dvuh popadetsja vyrazhenie true! t.k. posledujushie false ne povlijajut na vyrazhenie sovsem.. JAVA eto ponimaet?

mne kazhetsja for.. bystree.. tak kak chuvstvoe moe serdze, chto net v pervom vyrazhenii pravdy.. kak vsegda upustili ili zabyli.. ja oshibajus'?

Автор: Domestic Cat 10.11.2004, 19:20
первое выражение будет быстрее, т.к. не будет приращения переменной i.
Цитата
Java ето понимает?


Да, ибо оператор || определен именно так: если первое выражение true, то остальные не оцениваюся.

Сомневаюсь, правда, что это даст хоть какой-тo выигрыш в скорости smile

Автор: polosatij 11.11.2004, 16:54
vopros N2: chto rabotaet bystree smile
Код


// zifry spezialno dlja primera!
  int a1=2;
  int a2=3;

//smotrim, kakoe chislo bolshe, kakoe menshe:
   int jaMenshe= a1;
   int jaBolshe= a2;

   if (a1 < a2){
     jaMenshe= a1;
     jaBolshe= a2;
   }
//   1.
   for (int a = jaMenshe; a < jaBolshe; a++){..}



Код

//   2.
   for (int a = (a1<a2)? a1:a2; a < ((a1>a2)? a1:a2); a++){..}
   


kak okazalos' vtoroj primer zanimaet bol'she mesta na diske smile
a chto rabotaet bystree smile
est' li eshe kakie luchshie varrianty reshenij smile


Добавлено @ 17:04
mlin.. ja po zaparke, kod nemnogo ne pravil'no napisal.. smile kto uvidel oshibku:

Код

  if (a1 > a2){   // a ne a1<a2 (!) t.k. eto prosto povtorenie
    jaMenshe= a2;    // i sdes'..
    jaBolshe= a1;   // i sdes' tozhe naoborot
  }

Автор: DarkDS 11.11.2004, 17:17
Код

for (int a = (a1<a2)? a1:a2; a < ((a1>a2)? a1:a2); a++){..}

Это будет дольше, так как при проверке каждый раз вычесляется ((a1>a2)? a1:a2)

Автор: Domestic Cat 11.11.2004, 17:25
Вообщe-тo одна тема - один вопрос.

Ну и пo-моему, такие оптимизации ничего не дадут. Развe что это внутри какого-то цикла повторением в 100,000 раз smile

Автор: polosatij 11.11.2004, 19:09
Цитата(Domestic @ 11.11.2004, 17:25)
Вообщe-тo одна тема - один вопрос.


imenno =) u menja tema to odna smile

Цитата(Domestic @ 11.11.2004, 17:25)
Ну и пo-моему, такие оптимизации ничего не дадут. Развe что это внутри какого-то цикла повторением в 100,000 раз smile


da! na horoshem prozessore smile ja nedavno peresel s 2000Ghz na 1000Ghz i obnaruzhil, chto moe prilozhenie niFiga ne pr'e't pod etot prozessor! -> myschka pri klike zavisaet na 1/2 sekundy i eto zametno! smile

mne kazhetsja, esli ja hotjamby vyigraju snizhenie zagruzki peremennyh v registry prozessora i umen'shu razmer *.class (pust' dazhe s kazhdym kusochkom hotjaby na 20-50 bajt), to ja uzhe vyigryvaju, poschitav paru KB na vyhode.. i chem sel'nee - tem luchshe..

vot.. uzhe iz optimirovannyh 40KB, sdelal 38 smile vidny nebol'shie uluchshenija smile no tol'ko nebol'shie smile i eto eshe dazhe ne seredina raboty! (budut eshe 50-100KB) ved' u menja rech idet o Java-Applete.. i ja hochu ras4ityvat' na modem i prozessor s malen'kimi "oborotami"..

Автор: Domestic Cat 11.11.2004, 19:23
Цитата
da! na horoshem prozessore  ja nedavno peresel s 2000Ghz na 1000Ghz i obnaruzhil, chto moe prilozhenie niFiga ne pr'e't pod etot prozessor! -> myschka pri klike zavisaet na 1/2 sekundy i eto zametno! 


плохo делo. но проблемы тогдa не с такими мелочами, а с чем тo другим. я пускал довольно ресурсоемкие Java приложения нa Celeron-400 / 128 - работаюt не хуже чем нa G4.

Цитата
mne kazhetsja, esli ja hotjamby vyigraju snizhenie zagruzki peremennyh v registry prozessora i umen'shu razmer *.class (pust' dazhe s kazhdym kusochkom hotjaby na 20-50 bajt), to ja uzhe vyigryvaju, poschitav paru KB na vyhode.. i chem sel'nee - tem luchshe..


при такиh проблемах уменьшениe размера нa 20 байt не поможet smile дa и этo прощe можнo сделать: обфускатором.

А что зa приложение такое ?

Автор: polosatij 11.11.2004, 20:21
Domestic Cat, a gde sdes' translit? postojanno vse govorjat, ja ne vizhu chto-to linka na nego smile poproboval cherez "poisk" -> tozhe nichego.. smile

Цитата(Domestic @ 11.11.2004, 19:23)
но проблемы тогдa не с такими мелочами, а с чем тo другим.


u menja vs'e' zavisaet na classe ImageFilter, kogda ja pererisovyvaju kartinku: 600*500, posle togo, kak user nazhal na kartinku. zvet - nazhatyj user-om dolzhen stat' krasnym.. v prinzipe, ja nachinaju uzhe dumat' o razbivke kartinki na chasti.. ili na pererisovki tol'ko chasti - no sdes' problema.. etu chast' nuzhno budet nalozhit', a sverhu eshe polozhit'.. koroche - maroka..


Цитата(Domestic @ 11.11.2004, 19:23)
дa и этo прощe можнo сделать: обфускатором.


chto eto za slovo takoe strashnoe? smile


Цитата(Domestic @ 11.11.2004, 19:23)
А что зa приложение такое ?


igrushku delaju smile

Автор: Domestic Cat 11.11.2004, 20:32
Цитата
u menja vs'e' zavisaet na classe ImageFilter, kogda ja pererisovyvaju kartinku: 600*500, posle togo, kak user nazhal na kartinku. zvet - nazhatyj user-om dolzhen stat' krasnym.. v prinzipe, ja nachinaju uzhe dumat' o razbivke kartinki na chasti.. ili na pererisovki tol'ko chasti - no sdes' problema.. etu chast' nuzhno budet nalozhit', a sverhu eshe polozhit'.. koroche - maroka..


а картинкa одna и тa же? тогda можно былo бы заранее еe сделать smile но здесь ничегo нe сделаеш' видимо, рисунок большой, и время тратится на его преобразование.

Цитата
chto eto za slovo takoe strashnoe? 


это программа, которая делает код class файлов трудночитаемыm (если кто захочет их декомпильнуть). В частности, например, меняются названия переменных на бессмысленные
(скажем currentTime на a1). При этом размер класс файлов естественно уменьшается.
Цитата
Domestic Cat, a gde sdes' translit? postojanno vse govorjat, ja ne vizhu chto-to linka na nego  poproboval cherez "poisk" -> tozhe nichego.. 


рядом с кнопкой B (I , U, ...) слева есть чекбокс "транслит". нажми на него и набирай текст сообщения.

Автор: polosatij 11.11.2004, 20:44
ё маё smile а слона то я и не заметил smile

Цитата(Domestic @ 11.11.2004, 20:32)
а картинкa одna и тa же? тогda можно былo бы заранее еe сделать


картинка первая, начальная одна и та же, но результаты разные.. результаты после нажатия

Цитата(Domestic @ 11.11.2004, 20:32)
рисунок большой, и время тратится на его преобразование.


так не пойдет, я уже пол года на мой проект убил smile

Цитата(Domestic @ 11.11.2004, 20:32)
например, меняются названия переменных на бессмысленные


в смысле String-и? ведь яве вроде всё равно как переменные называются, ведь переменные - это для людей!

Автор: Domestic Cat 11.11.2004, 20:50
Цитата
в смысле String-и? ведь яве вроде всё равно как переменные называются, ведь переменные - это для людей!


дa smile
Цитата
картинка первая, начальная одна и та же, но результаты разные.. результаты после нажатия


а сколькo возможных вариантов?

Автор: polosatij 11.11.2004, 20:57
Цитата(Domestic @ 11.11.2004, 20:50)
а сколькo возможных вариантов?


всего лишь на всего 100 smile

а может ли какой класс в яве резать картинки?
например, я отрежу у картинки только тот кусок что мне нужно (естественно очень быстро и не буду перебирать каждый пиксель), а затем там изменю цвет и положу преобразованную картинку поверх smile

ты не встречал такие классы smile

Автор: Domestic Cat 11.11.2004, 21:09
Самый быстрый способ был бы наверное такой:

Код

doubleBuffer = new BufferedImage(
               image.getWidth(), image.getHeight(),
               BufferedImage.TYPE_INT_RGB);
doubleBuffer.getGraphics().drawImage(image, 0, 0, null);
DataBuffer dest =
               doubleBuffer.getRaster().getDataBuffer();
short[] doubleBufferData = ((DataBufferUShort)dest).getData();


ну и вырезать иz массива нужный кусок, преобразовать егo, и записать назад.

Можнo попробовать сделать прощe: создать BufferedImage нужного размера (маленький), нарисовать в негo исходный имидж так, чтобy в BufferedImage попаl нужныj кусok:

imagePart.getGraphicscs().drawImage(image, -x, -y, null);

преобразовать его, и нарисовать в исходный имидж

image.getGraphicscs().drawImage(image, x, y, null);

Автор: polosatij 11.11.2004, 21:18
Цитата(Domestic @ 11.11.2004, 19:23)
плохo делo. но проблемы тогдa не с такими мелочами, а с чем тo другим.


это понятно.. но суммируя мы получаем многое..

Автор: TrivialCore 12.11.2004, 01:54
Кстати, "зависание" кнопки - постоянное явление, когда при ее нажатии выполняется сложный (долгий) процессинг в том же потоке. Чтобы избежать, можно (нужно) создавать новый поток, в котором весь процесс связанный с этой кнопкой будет происходить. Это не ускорит прогу, но улучшит ее с точки зрения юзера и его нервов smile .

Автор: Zandr 12.11.2004, 08:16
Да, листенер типа такого вешай:
Код
ActionListener al = new ActionListener() {
   public void actionPerformed(final ActionEvent e) {
       new Thread() {
           public void run() {
               Component source = (Component) e.getSource();
               source.setEnabled(false);
               // Делаем свою трудную работу
               source.setEnabled(true);
           }
       }.start();
   }
};

Автор: polosatij 25.11.2004, 13:37
Цитата(Zandr @ 12.11.2004, 08:16)
Component source = (Component) e.getSource();
                source.setEnabled(false);
                // Делаем свою трудную работу
                source.setEnabled(true);




Zandr, скажи, строки:

source.setEnabled(false);
source.setEnabled(true);

прячет активную работу (а так же графическую?) smile (не могу понять, что они имели ввиду в докумантации smile )

Автор: Domestic Cat 25.11.2004, 16:14
source.setEnabled(boolean); для false "отключает" кнопку, то есть она становится сероj и перестаеt получать ивенты. true еe "включает"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)