From: Johan L. <jo...@Da...> - 2005-01-10 23:16:52
|
Recently a TGL user noticed a memory leak when TGL is running. http://groups.yahoo.com/group/theguiloft/message/593 After an evening of trying to isolate this I've found that it's related to Win32::GUI, and it happens when: - A Timer - on a Win32::GUI::Window with the $win->{-dialogui} = 1 or on a Win32::GUI::DialogBox - fires off an event (an event handler sub doesn't need to exist) This example program demonstrates the leak. Open the Task Manager and watch the perl.exe process grow a couple of K/sec. Note that the mem usage can vary when the windows get/lose focus, that's not the leak. #!/usr/local/bin/perl -w $|++; use strict; use Win32::GUI; my $winTimer = Win32::GUI::Window->new( -name => "winTimer", -left => 50, -top => 50, -height => 200, -width => 300, -text => "Test timer mem leak", ); $winTimer->{-dialogui} = 0; #1 => leak, 0 => no leak my $timTimer = $winTimer->AddTimer("timTimer", 10); #100 times/sec $winTimer->Show(); Win32::GUI::Dialog(); sub ::timTimer_Timer { print ","; } __END__ This seems entirely related to the -dialogui setting, using a Win32::GUI::DialogBox and setting the -dialogui to 0 doesn't result in a leak. Win32::GUI 1.0 This is perl, v5.8.3 built for MSWin32-x86-multi-thread (with 8 registered patches, see perl -V for more detail) /J -------- ------ ---- --- -- -- -- - - - - - Johan Lindström Sourcerer @ Boss Casinos johanl AT DarSerMan.com Latest bookmark: "TCP Connection Passing" http://tcpcp.sourceforge.net/ dmoz: /Computers/Programming/Languages/JavaScript/ 12 |