Unix で実行されている Perl/Tk で大きなリークの問題が発生しています。特定の制限により、ほとんどのコードを投稿することはできませんが、メモリ リークの原因を特定し、同じ症状を持つ小さなプログラムを作成することができました。基本的に、フレームが破棄され、定期的に再作成される GUI を実行しています。ただし、これにより大きなメモリ リークが発生し、それが増え続けているようです。destroy コマンドはメモリ内のすべてのトレースを削除すると思っていましたが、そうではないようです。私は Perl のガベージ コレクションについてもあまり詳しくありません。このプログラムは、一度に数日または数週間実行されるため、メモリ リークは理想的ではありません。メモリリークを止めるアイデアはありますか? 私は Perl の使用に制限されているため、残念ながらコードを Python などに簡単に移植することはできません。
#!opt/project/COTS/bin/perl
use strict;
use warnings;
use Tk;
$Tk::mw = MainWindow->new;
$Tk::mw->repeat(10,\$build);
my $status;
&build;
sub build{
$status->destroy() if ($status);
$status = $Tk::mw->Frame->pack(-side => 'top');
my $left_frame = $status->Frame(
-relief =>'sunken',
-borderwidth => 1
)->pack(-side => 'left', -anchor => 'nw', -padx => 4, -pady => 5);
my $right_frame = $status->Frame(
-relief =>'sunken',
-borderwidth => 1
)->pack(-side => 'left', -anchor => 'nw', -padx => 4, -pady => 5);
}
MainLoop;