У меня проблема с использованием записей Delphi Regex. Это моя проблема Код:Устранение утечки памяти с помощью TMatchCollection/TMatch
function CrawlThread.CrawlLinks: bool;
var
Matches: TMatchCollection;
Match: TMatch;
i: integer;
begin
Matches:= TRegex.Matches(code, frmCrawler.Edit2.Text);
if Matches.Count > 0 then
begin
i:= 0;
for Match in Matches do
begin
SetLength(CrawledLinks, i + 1);
if (POS('https://', Match.Value) = 0) then
CrawledLinks[i]:= 'http://' + Match.Value
else
CrawledLinks[i]:= Match.Value;
inc(i);
end;
Result:= true;
end;
Matches:= TRegex.Matches(code, frmCrawler.Edit3.Text);
if Matches.Count > 0 then
begin
i:= 0;
for Match in Matches do
begin
SetLength(FollowLinks, i + 1);
if (POS('https://', Match.Value) = 0) then
FollowLinks[i]:= 'http://' + Match.Value
else
FollowLinks[i]:= Match.Value;
inc(i);
end;
Result:= true;
end;
Этот код будет вызываться несколько раз внутри нитей, если я комментирую его, я получаю как 26 Мб на использование памяти, и не растет ... Когда я использую его, я начинаю вокруг 50 МБ (что не проблема), но он продолжает расти, как 1 МБ в минуту (через 1 мин этот код называется сотни раз).
Использование ReportMemoryLeaksOnShutdown: = true; я получаю этот выход:
Это почти то же самое, когда комментировал или с помощью кода, так что я не считаю, что это объяснить 1Мб за минуту при использовании кода. Конечно, утечки UnicodeString беспокоят меня, но поскольку я получаю их, даже когда не использую код, я не думаю, что это проблема. Есть ли какая-нибудь идея, почему этот код потребляет столько памяти?
Этот код не производит эти утечки. Пожалуйста, сделайте [mcve] и спросите еще раз. –
Да, я знаю, что с этим кодом трудно понять. Но, как я уже сказал, когда я прокомментировал это, я не получаю, что огромная память, растущая каждую минуту ... Вы уверены, что этот код не производит эти утечки? И почему ReportMemoryLeaksOnShutdown не показывает мне больше утечек при использовании/не использовании этого кода? Может быть, общий для TRegex потребляет огромную память (даже без утечек)? – user3810691
Пожалуйста, сделайте [mcve]. –