Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  02:34[Войти] | [Зарегистрироваться]
Обсуждение темы:
Вопросы оптимизации кода

Тема открыта по просьбе жителей Королевства и посвящена обсуждению вопросов оптимизации кода. Выставляйте свои лучшие и худшие тексты и не стесняйтесь их обсуждать. В споре рождается истина. Или, по крайней мере, оптимизация.

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 737 сообщений

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Тестирование проекта. Отладка.
  • Подводные камни
  • Централизованная обработка ошибок
  • Бета-тестирование
  • Давайте учиться на ошибках.
  • Почему программисты допускают ошибки?
  • Автоматизированные тесты для GUI
  • О системах контроля ошибок

  • <<<... | 337—328 | 327—318 | 317—308 | ...>>>
    Всего сообщений в теме: 737; страниц: 74; текущая страница: 42


    № 327   07-10-2005 07:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 325« (al_mt)
    ___________________________

    А мне кажется, что такое явное указание повышает удобочитаемость программ. Ибо становится ясной не только реализация, но и ход мысли программиста. По крайней мере, мне в собственном коде становится проще разобраться :)
    Ваше мнение?

    Хотел написать большой монолог, но потом передумал. Лучше скажите, как бы Вы писали понятный для себя код на Java?


    № 326   07-10-2005 07:33 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 325« (al_mt)
    ___________________________
    Указатель на указатель...


    № 325   07-10-2005 07:17 Ответить на это сообщение Ответить на это сообщение с цитированием
    Это не вопрос и не ответ, а скорее опрос. Дело в том, что при пользовании ООП в дельфах, я все операции с указателями на объекты прописываю явно, ну там ^@. Некоторых моих коллег это дико злит (уж не знаю почему :) ). А мне кажется, что такое явное указание повышает удобочитаемость программ. Ибо становится ясной не только реализация, но и ход мысли программиста. По крайней мере, мне в собственном коде становится проще разобраться :)
    Ваше мнение?


    № 324   01-10-2005 11:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    дополню »сообщение 323«
    ___________________________
    Дурацкий совет: обновляйте прогрессбар не при каждом шаге, а, допустим, при каждом десятом. Иногда такие трюки приводят к существенному ускорению.

    Вобщем без прогона под провайлером трудно сказать, что тормозит.


    № 323   01-10-2005 11:48 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 320« (Евгений)
    ___________________________

    Извините за несколько отвлеченный ответ, но
    насколько я знаю, прежде всего надо исследовать и понять за счет чего тормозит. Что говорят профайлеры на эту тему? А кстати, какие профайлеры для дельфей порекомендуют собравшиеся?


    № 322   01-10-2005 06:24 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 320« (Евгений)
    ___________________________

    Дополню:

    if xx>=3.14*d then



    В Delphi есть функция Pi

    T[i,0,k]:=T[i,1,k]+(dy/lamb[round(T[i,1,k])])*q1
    else
    T[i,0,k]:=T[i,1,k]+(al*dy/lamb[round(T[i,1,k])])*(T[i,1,k]-T0)



    Не стоит вычислять lamb, если Вы используете величину ей обратную. Вычисляйте dy/lamb.

    Вообще, я бы посоветовал привести текст реализуемой задачи. На Королевстве наверняка есть знающие вычислительную математику - могут подсказать более эффективный алгоритм.

    С уважением,


    № 321   01-10-2005 05:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 320« (Евгений)
    ___________________________

    Добрый день!

    Извините, но Ваш код трудночитаем: имена переменных кроме Вас никому ни о чем не говорят,
    нет отступов.

    Не назову себя специалистом по оптимизации,
    но вот несколько соображений:

    For i:=0 to n+1 do
    for j:=0 to m+1 do
    for k:=0 to kk+1 do
    T1[i,j,k]:=T[i,j,k];



    Если массивы одного и то же типа, то можно выполнить присваивание

    T1:=T;



    Fox:=dt/(dx*dx);
    Foy:=dt/(dy*dy);
    Foz:=dt/(dz*dz);
    Fo:=-2*(Fox+Foy+Foz);
    Fo:=-2*(Fox+Foy+Foz);



    Этот код можно поместить перед циклом repeat-until,

    if (((i-nnn)*(i-nnn)/(aaa*aaa))+((k-kkk)*(k-kkk)/(bbb*bbb)))<1



    Деление, вроде бы, до сих пор медленнее умножения.
    Можно написать так:

    if ( Sqr(i-nnn)*Sqr(aaa)+Sqr(k-kkk)*Sqr(bbb))<Sqr(bbb)*Sqr(aaa)



    Кроме того, Sqr(bbb), Sqr(aaa) можно вычислить перед циклом.

    for j:=0 to m do
    for k:=0 to kk do
    begin
    T[0,j,k]:=T[1,j,k];
    T[n+1,j,k]:=T[n,j,k];
    end;



    Как уже говорилось ниже, цикл

    for i:=m downto 0 do

    будет выполняться чуток быстрее (сравнение с 0 требует меньше ассемблерных команд)

    for ii:=0 to 10000 do
    begin
    w[ii]:=aw1+bw1*ii+cw1*ii*ii-(aw2+bw2*ii+cw2*ii*ii)*sig+(aw3+bw3*ii+cw3*ii*ii)*sig*sig;
    lamb[ii]:=al1+bl1*ii+cl1*ii*ii-(al2+bl2*ii+cl2*ii*ii)*sig+(al3+bl3*ii+cl3*ii*ii)*sig*sig;
    end;



    Значение sig*sig можно вычислить перед циклом,
    а ii*ii можно вычислять только 1 раз на каждой итерации

    dt1:=1;te:=0;
    ....
    repeat
    te:=te+dt1;
    ....
    if te<kon then
    form1.ProgressBar1.Position:=round(te*100/kon);
    until te>=kon;



    if te<kon then можно в любом случае убрать - оно примет False только 1 раз, перед выходом из цикла.
    Если dt1 = 1 всегда, то лучше заменить repeat на for

    for te:=0 to Trunc(kon) do begin
    ...
    end



    С уважением,


    № 320   01-10-2005 04:21 Ответить на это сообщение Ответить на это сообщение с цитированием
    Есть кусок программы, работу которого нужно ускорить:


    for ii:=0 to 10000 do
    begin
    w[ii]:=aw1+bw1*ii+cw1*ii*ii-(aw2+bw2*ii+cw2*ii*ii)*sig+(aw3+bw3*ii+cw3*ii*ii)*sig*sig;
    lamb[ii]:=al1+bl1*ii+cl1*ii*ii-(al2+bl2*ii+cl2*ii*ii)*sig+(al3+bl3*ii+cl3*ii*ii)*sig*sig;
    end;

    dt:=0.5/(wmax*((1/(dx*dx))+(1/(dy*dy))+(1/(dz*dz))));
    Form1.dto.text:=floattostr(dt);
    Vrem:=strtofloat(Form1.tt.Text);
    dt1:=1;te:=0;

    kon:=round(Vrem/dt);
    aaa:=ddx/(2*dx);
    bbb:=ddz/(2*dz);
    nnn:=0;
    kkk:=0;
    p:=0;
    xx:=0;

    for i:=0 to n+1 do
    for j:=0 to m+1 do
    for k:=0 to kk+1 do
    T[i,j,k]:=100;

    repeat
    te:=te+dt1;
    nnn:=nnn+v*dt/dx;
    xx:=xx+v*dt;
    if xx>=3.14*d then
    begin
    p:=p+1;
    xx:=0;
    kkk:=kkk+s/dx;
    nnn:=0;
    end;
    for j:=0 to m do
    for k:=0 to kk do
    begin
    T[0,j,k]:=T[1,j,k];
    T[n+1,j,k]:=T[n,j,k];
    end;

    for i:=0 to n do
    for j:=0 to m do
    begin
    T[i,j,0]:=T[i,j,1];
    T[i,j,kk+1]:=T[i,j,kk];
    end;

    for i:=0 to n do
    for k:=0 to kk do
    begin
    T[i,m+1,k]:=T[i,m,k];
    if (((i-nnn)*(i-nnn)/(aaa*aaa))+((k-kkk)*(k-kkk)/(bbb*bbb)))<1 then
    T[i,0,k]:=T[i,1,k]+(dy/lamb[round(T[i,1,k])])*q1
    else
    T[i,0,k]:=T[i,1,k]+(al*dy/lamb[round(T[i,1,k])])*(T[i,1,k]-T0)
    end;


    For i:=0 to n+1 do
    for j:=0 to m+1 do
    for k:=0 to kk+1 do
    T1[i,j,k]:=T[i,j,k];

    Fox:=dt/(dx*dx);
    Foy:=dt/(dy*dy);
    Foz:=dt/(dz*dz);
    Fo:=-2*(Fox+Foy+Foz);
    Fo:=-2*(Fox+Foy+Foz);

    For i:=1 to n do
    for j:=1 to m do
    for k:=1 to kk do
    begin
    T[i,j,k]:=T1[i,j,k]+w[round(T1[i,j,k])]*(Fox*(T1[i+1,j,k]+T1[i-1,j,k])+
              Foy*(T1[i,j+1,k]+T1[i,j-1,k])+
              Foz*(T1[i,j,k+1]+T1[i,j,k-1])+Fo);
              end;
    if te<kon then
    form1.ProgressBar1.Position:=round(te*100/kon);
    until te>=kon;


    а то процесс работы сего продукта затягивается на неимоверные сроки...
    Я оптимизировал, как смог...
    Хотелось бы узнать есть ли еще какие нибудь пути оптимизации данной программы...
    Заранее спасибо.


    № 319   15-09-2005 11:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 317« (panda)
    ___________________________
    >>> Когда у меня были маленькие и глупенькие заказчики, я как раз всегда убеждал их сделать так, как считал правильным :-)
    Ладно, будем считать, что они -- тинейджеры-максимаоисты, не имеющие представления о реальной жизни ;-)
     Geo


    № 318   15-09-2005 08:36 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 316« (Max Belugin)
    ___________________________

    тут вопрос такой. версию N+1 сделать проще на VB, а [N+1...N+n] проще на дельфи.

    т.е. выигрывая в краткосрочном плане, проигрываем в долгосрочном.


    Чаще всего оно так (хотя и не всегда).
    Хотя есть и другой момент: пока Вы готовите свое наступление в долгосрочном плане, конкурент может разорить Вас, выиграв в краткосрочном.


    <<<... | 337—328 | 327—318 | 317—308 | ...>>>
    Всего сообщений в теме: 737; страниц: 74; текущая страница: 42


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования