Четверг, 22.06.2017, 15:01 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024 
delfcode » Delphi » Вопросы по Delphi » Вздутие оперативки (приложение раздувается и виснет)
Вздутие оперативки
tatsuДата: Пятница, 13.09.2013, 20:58 | Сообщение # 1
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
собственно фрагмент кода:
for i:=0 to mmo1.Lines.Count do
begin

webbrowser1.Navigate('http://otvet.mail.ru/'+combobox1.Text+'/'+mmo1.lines.Strings[i]);
pause(2);
end;
методом коментирования установил что проблема в строке webbrowser1.Navigate('http://otvet.mail.ru/'+combobox1.Text+'/'+mmo1.lines.Strings[i]);
при каждом повторном выполнении этой строки размер приложения в опративке увеличивается на 150-300 кб.
Как этого избежать? Поможет ли содание и уничтожение Twebbrowser внутри цикла?


Ибо маст дай!

Сообщение отредактировал tatsu - Пятница, 13.09.2013, 20:59
 
dolphinДата: Пятница, 13.09.2013, 21:18 | Сообщение # 2
Администратор
Сообщений: 902
Статус: Offline
Можно попробовать освобождать память после каждого вызова
Например
Доступно только для пользователей


Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
tatsuДата: Пятница, 13.09.2013, 22:18 | Сообщение # 3
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
за 10 мин работы прошло 335 циклов, прирост в памяти приблизительно 200-400 кб. Это уже прогрес, раньше за такое количество циклов прирост был примерно в 100-200 МБ

Ибо маст дай!

Сообщение отредактировал tatsu - Пятница, 13.09.2013, 22:22
 
dolphinДата: Пятница, 13.09.2013, 22:33 | Сообщение # 4
Администратор
Сообщений: 902
Статус: Offline
Смыл такой, компонент создавшись раз отработав, уничтожается и дальше создаётся заново и всё это за счёт одного участка памяти который то занимается то уничтожается, а что в нем происходит нас уже не волнует smile

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
tatsuДата: Суббота, 14.09.2013, 07:50 | Сообщение # 5
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
Потестил, запустил 6 копий и оставил на ночь. Все копии повисли выполнив 1300-1050 циклов, увеличения оперативки нет. Весь код:
Код

unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ExtCtrls;

type
    TForm1 = class(TForm)
      mmo1: TMemo;
      btn1: TButton;
      mmo2: TMemo;
      lbl1: TLabel;
      lbl2: TLabel;
      btn2: TButton;
      btn3: TButton;
      btn4: TButton;
      grp1: TGroupBox;
      lbl3: TLabel;
      lbl4: TLabel;
      lbl5: TLabel;
      pb1: TProgressBar;
      lbl6: TLabel;
      tmr1: TTimer;
      ComboBox1: TComboBox;
      procedure btn1Click(Sender: TObject);
      procedure btn2Click(Sender: TObject);
      procedure btn3Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      procedure btn4Click(Sender: TObject);
      procedure lbl6Click(Sender: TObject);
      procedure tmr1Timer(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;

var
    stop:Boolean;

    Form1: TForm1;
    x:string;

implementation

{$R *.dfm}

procedure pause(p:byte);  // p - ïàóçà â ñåêóêíäàõ
var pa1:ttime;
begin
    pa1:=encodetime(0,0,p,0)+time;
    repeat
      application.processmessages;   
      sleep(10);
    until time>=pa1;
end;

procedure TForm1.btn1Click(Sender: TObject);
label tormoz;
var   i:Integer;
Browser : TWebBrowser;

begin
x:=inttostr(mmo1.Lines.count);

lbl3.Caption:='Îáùåå êîëè÷åñòâî '+x;
     
    stop:=False;
    btn1.Enabled:=False;
   pb1.Max:=mmo1.Lines.Count;
   for i:=0 to mmo1.Lines.Count do
     begin
       if stop=True then goto tormoz;
        pb1.Position:=i;
       lbl4.Caption:='Òåêóùèé '+IntToStr(i);
       lbl5.Caption:='Ïðàâèëüíûõ '+inttostr(mmo2.Lines.Count);
       browser:= TWebBrowser.Create(nil);
       Browser.Navigate('http://otvet.mail.ru/'+combobox1.Text+'/'+mmo1.lines.Strings[i]);
        

       pause(2);
        

      if Browser.LocationURL=('http://otvet.mail.ru/'+combobox1.Text+'/'+mmo1.lines.Strings[i]) then
         mmo2.Lines.Add(mmo1.lines.Strings[i]) ;
        Browser.Free;
     end;
     tormoz:

end;

procedure TForm1.btn2Click(Sender: TObject);
begin

if FileExists('list.txt') then mmo1.Lines.LoadFromFile('list.txt');
lbl3.Caption:='Îáùåå êîëè÷åñòâî '+inttostr(mmo1.Lines.count);
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
mmo2.Lines.SaveToFile('valid.txt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   lbl3.Caption:='Общее количество ';
   lbl4.Caption:='Текущий ';
   lbl5.Caption:='Правильных ';
end;

procedure TForm1.btn4Click(Sender: TObject);
begin
   if form1.ClientHeight=80 then form1.ClientHeight:=391
   else form1.ClientHeight:=80;
end;

procedure TForm1.lbl6Click(Sender: TObject);
begin
stop:=True;
   btn1.Enabled:=True;
   tmr1.Enabled:=False;
end;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
mmo2.Lines.SaveToFile('valid.txt');
end;

end.


Это чекер почтовых ящиков для mail.ru, принцип работы заключается в следующем.
так выглядит адрес страницы пользователя в сервисе ответы на mail.ru http://otvet.mail.ru/mail/atpe.
как видите, сначала идёт домен, потом почтовый домен пользователя и дальше его логин.
А если имя пользователя изменить на неправильное, то нас переадресует на http://otvet.mail.ru/mail/atpe9999/invite/
Таким образом, чтобы проверить валидность мыла, мы отправляем браузер по ссылке, если чрез 2 сек переадресации не произошло, то ящик валиден. 2-сек критичное время, пока браузер однозначно откроет страницу, однако в зависимости от ширины вашего канала, можно запускать несколько копий программы, на своих 30 мбит/с я запусти 6 копий, которые друг другу никак не мешали.
Прикрепления: mail-4.rar(220Kb)


Ибо маст дай!

Сообщение отредактировал tatsu - Суббота, 14.09.2013, 07:51
 
dolphinДата: Понедельник, 16.09.2013, 12:36 | Сообщение # 6
Администратор
Сообщений: 902
Статус: Offline
Забыл модуль прикрепить SHDocVw

Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
tatsuДата: Воскресенье, 22.09.2013, 03:07 | Сообщение # 7
Частый гость
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 27
Статус: Offline
не декларированый идентификатор. подробнее о нём можно?

Ибо маст дай!
 
xXxSh@dowxXxДата: Пятница, 04.10.2013, 19:09 | Сообщение # 8
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
Цитата (tatsu)
Таким образом, чтобы проверить валидность мыла, мы отправляем браузер по ссылке, если чрез 2 сек переадресации не произошло, то ящик валиден.


Зачем так утруждаться и мучиться с ожиданием редиректа аж в 2 сек. wacko
что мешает получать сразу результат ответа, в котором указан редирект через 2 сек., и не дожидаясь редиректа выводить False ?


Сообщение отредактировал xXxSh@dowxXx - Пятница, 04.10.2013, 19:09
 
delfcode » Delphi » Вопросы по Delphi » Вздутие оперативки (приложение раздувается и виснет)
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2017 Хостинг от uCoz