Вздутие оперативки
|
tatsu
|
Дата: Пятница, 13.09.2013, 20:58 | Сообщение # 1
|
Был не раз
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 22
Статус: 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
|
Администратор
Сообщений: 944
Статус: Offline
|
Можно попробовать освобождать память после каждого вызова
Например
Доступно только для пользователей
Система: Windows 7 x64, Windows XP
Delphi: 7, XE2, XE4
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик.
|
|
|
|
|
tatsu
|
Дата: Пятница, 13.09.2013, 22:18 | Сообщение # 3
|
Был не раз
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 22
Статус: Offline
|
за 10 мин работы прошло 335 циклов, прирост в памяти приблизительно 200-400 кб. Это уже прогрес, раньше за такое количество циклов прирост был примерно в 100-200 МБ
Ибо маст дай!
Сообщение отредактировал tatsu - Пятница, 13.09.2013, 22:22
|
|
|
|
|
dolphin
|
Дата: Пятница, 13.09.2013, 22:33 | Сообщение # 4
|
Администратор
Сообщений: 944
Статус: Offline
|
Смыл такой, компонент создавшись раз отработав, уничтожается и дальше создаётся заново и всё это за счёт одного участка памяти который то занимается то уничтожается, а что в нем происходит нас уже не волнует 
Система: Windows 7 x64, Windows XP
Delphi: 7, XE2, XE4
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик.
|
|
|
|
|
tatsu
|
Дата: Суббота, 14.09.2013, 07:50 | Сообщение # 5
|
Был не раз
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 22
Статус: 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
|
Администратор
Сообщений: 944
Статус: Offline
|
Забыл модуль прикрепить SHDocVw
Система: Windows 7 x64, Windows XP
Delphi: 7, XE2, XE4
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик.
|
|
|
|
|
tatsu
|
Дата: Воскресенье, 22.09.2013, 03:07 | Сообщение # 7
|
Был не раз
Зарегистрирован: 17.05.2009
Группа: Пользователи
Сообщений: 22
Статус: Offline
|
не декларированый идентификатор. подробнее о нём можно?
Ибо маст дай!
|
|
|
|
|