Вздутие оперативки
|
|
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 |
Администратор
Сообщений: 906
Статус: Offline
| Можно попробовать освобождать память после каждого вызова Например Доступно только для пользователей
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
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 |
Администратор
Сообщений: 906
Статус: Offline
| Смыл такой, компонент создавшись раз отработав, уничтожается и дальше создаётся заново и всё это за счёт одного участка памяти который то занимается то уничтожается, а что в нем происходит нас уже не волнует
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
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 копий, которые друг другу никак не мешали.
Ибо маст дай!
Сообщение отредактировал tatsu - Суббота, 14.09.2013, 07:51 |
|
| |
dolphin | Дата: Понедельник, 16.09.2013, 12:36 | Сообщение # 6 |
Администратор
Сообщений: 906
Статус: Offline
| Забыл модуль прикрепить SHDocVw
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
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 сек. что мешает получать сразу результат ответа, в котором указан редирект через 2 сек., и не дожидаясь редиректа выводить False ?
Сообщение отредактировал xXxSh@dowxXx - Пятница, 04.10.2013, 19:09 |
|
| |