From: Steve L. <ste...@sc...> - 2006-08-03 13:10:00
|
Hi all Not strictly a win32-gui related question. How would I go about tracking down my memory usage in a perl script? I have a small memory leak in my code somewhere, but no idea where to start looking for clues. Anyone got any pointers or tips? Steve |
From: Emmanuel E <emm...@gm...> - 2006-08-03 13:13:46
|
are you already using use strict? if not use it and cleanup every warning. threads generally have all kinds of memory problems so if ur using threads life becomes very difficult. Steve Loughran wrote: > Hi all > > Not strictly a win32-gui related question. How would I go about tracking > down my memory usage in a perl script? I have a small memory leak in my > code somewhere, but no idea where to start looking for clues. > > Anyone got any pointers or tips? > > Steve > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > > > |
From: Steve L. <ste...@sc...> - 2006-08-03 15:30:02
|
Strict - yes, all the time warning - most of the time :) I think I have tracked the leak down to the window_paint routine, and specifically to the DIBitmap routine AlphaCopyToDC(). I need to do some more fixed tests, but to me it looks like a problem with Alpha channels in DIBitmap structures, or maybe just DIBitmap structures loaded from PNG files.... or both :) In window_paint, I call AlphaCopyToDC() to paint a solid image into the $memDC (no memory leak), but when I use the same routine to paint a load of smaller images that contain transparency layers via AlphaCopyToDC() into the $memDC, the memory leak starts appearing. If I comment out just this one call from the foreach loop (and leave everything else running), the leak doesnt happen. - Active Perl 5.8.6 - Win32-GUI-DIBitmap [0.15] Need to find some transparent images to use as background image, and see if the leak starts again. Steve Emmanuel E wrote: > are you already using use strict? if not use it and cleanup every warning. > > threads generally have all kinds of memory problems so if ur using > threads life becomes very difficult. > > Steve Loughran wrote: >> Hi all >> >> Not strictly a win32-gui related question. How would I go about tracking >> down my memory usage in a perl script? I have a small memory leak in my >> code somewhere, but no idea where to start looking for clues. >> >> Anyone got any pointers or tips? >> >> Steve >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share your >> opinions on IT & business topics through brief surveys -- and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Perl-Win32-GUI-Users mailing list >> Per...@li... >> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> http://perl-win32-gui.sourceforge.net/ >> >> >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > |
From: Steve L. <ste...@sc...> - 2006-08-03 16:20:12
|
OK, some more on this memory leak issue. If I change the code from using AlphaCopyToDC() to using CopyToDC() (Havent changed anything else in the code at all), the memory leak stops... completely. If I put AlphaCopyToDC() back in again, the leak reappears. Odd.... i`ll try to write a small code sample with some images and put them all in a zip so someone else can try it (just to save my sanity). Is Laurent Rocher a subscribed member on the win32-gui mail list? Steve Steve Loughran wrote: > Strict - yes, all the time > warning - most of the time :) > > I think I have tracked the leak down to the window_paint routine, and > specifically to the DIBitmap routine AlphaCopyToDC(). I need to do some > more fixed tests, but to me it looks like a problem with Alpha channels > in DIBitmap structures, or maybe just DIBitmap structures loaded from > PNG files.... or both :) > > In window_paint, I call AlphaCopyToDC() to paint a solid image into the > $memDC (no memory leak), but when I use the same routine to paint a load > of smaller images that contain transparency layers via AlphaCopyToDC() > into the $memDC, the memory leak starts appearing. If I comment out just > this one call from the foreach loop (and leave everything else running), > the leak doesnt happen. > > - Active Perl 5.8.6 > - Win32-GUI-DIBitmap [0.15] > > Need to find some transparent images to use as background image, and see > if the leak starts again. > > Steve > > Emmanuel E wrote: >> are you already using use strict? if not use it and cleanup every warning. >> >> threads generally have all kinds of memory problems so if ur using >> threads life becomes very difficult. >> >> Steve Loughran wrote: >>> Hi all >>> >>> Not strictly a win32-gui related question. How would I go about tracking >>> down my memory usage in a perl script? I have a small memory leak in my >>> code somewhere, but no idea where to start looking for clues. >>> >>> Anyone got any pointers or tips? >>> >>> Steve >>> >>> ------------------------------------------------------------------------- >>> Take Surveys. Earn Cash. Influence the Future of IT >>> Join SourceForge.net's Techsay panel and you'll get the chance to share your >>> opinions on IT & business topics through brief surveys -- and earn cash >>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>> _______________________________________________ >>> Perl-Win32-GUI-Users mailing list >>> Per...@li... >>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>> http://perl-win32-gui.sourceforge.net/ >>> >>> >>> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share your >> opinions on IT & business topics through brief surveys -- and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Perl-Win32-GUI-Users mailing list >> Per...@li... >> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> http://perl-win32-gui.sourceforge.net/ >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > |
From: Robert M. <rm...@po...> - 2006-08-03 19:11:34
|
Steve, Laurent in no longer maintaining WIN32::GUI::DIBitmap, and it's in the Win32::GUI repository. I've had a quick look at the source, and it appears there is indeed a leak, which matches your described symptoms: - If there is no transparency in the image, then AlphaCOpyToDC uses exactly the same code as CopyToDC, so no leak. - As soon as there is some transparency, then it looks like it will leak about the size of the bitmap (width of bitmap * height of bitmap * 4 bytes per call plus a bit of overhead). The fix is simple. I'm hoping to get a beta release of 1.04 (which I will add this fix to) up for download later today - you might like to download it and see if it fixes this problem? Regards, Rob. Steve Loughran wrote: > OK, some more on this memory leak issue. > > If I change the code from using AlphaCopyToDC() to using CopyToDC() > (Havent changed anything else in the code at all), the memory leak > stops... completely. If I put AlphaCopyToDC() back in again, the leak > reappears. > > Odd.... i`ll try to write a small code sample with some images and put > them all in a zip so someone else can try it (just to save my sanity). > > Is Laurent Rocher a subscribed member on the win32-gui mail list? > > Steve > > > Steve Loughran wrote: >> Strict - yes, all the time >> warning - most of the time :) >> >> I think I have tracked the leak down to the window_paint routine, and >> specifically to the DIBitmap routine AlphaCopyToDC(). I need to do some >> more fixed tests, but to me it looks like a problem with Alpha channels >> in DIBitmap structures, or maybe just DIBitmap structures loaded from >> PNG files.... or both :) >> >> In window_paint, I call AlphaCopyToDC() to paint a solid image into the >> $memDC (no memory leak), but when I use the same routine to paint a load >> of smaller images that contain transparency layers via AlphaCopyToDC() >> into the $memDC, the memory leak starts appearing. If I comment out just >> this one call from the foreach loop (and leave everything else running), >> the leak doesnt happen. >> >> - Active Perl 5.8.6 >> - Win32-GUI-DIBitmap [0.15] >> >> Need to find some transparent images to use as background image, and see >> if the leak starts again. >> >> Steve >> >> Emmanuel E wrote: >>> are you already using use strict? if not use it and cleanup every warning. >>> >>> threads generally have all kinds of memory problems so if ur using >>> threads life becomes very difficult. >>> >>> Steve Loughran wrote: >>>> Hi all >>>> >>>> Not strictly a win32-gui related question. How would I go about tracking >>>> down my memory usage in a perl script? I have a small memory leak in my >>>> code somewhere, but no idea where to start looking for clues. >>>> >>>> Anyone got any pointers or tips? >>>> >>>> Steve >>>> >>>> ------------------------------------------------------------------------- >>>> Take Surveys. Earn Cash. Influence the Future of IT >>>> Join SourceForge.net's Techsay panel and you'll get the chance to share your >>>> opinions on IT & business topics through brief surveys -- and earn cash >>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>>> _______________________________________________ >>>> Perl-Win32-GUI-Users mailing list >>>> Per...@li... >>>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>>> http://perl-win32-gui.sourceforge.net/ >>>> >>>> >>>> >>> ------------------------------------------------------------------------- >>> Take Surveys. Earn Cash. Influence the Future of IT >>> Join SourceForge.net's Techsay panel and you'll get the chance to share your >>> opinions on IT & business topics through brief surveys -- and earn cash >>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>> _______________________________________________ >>> Perl-Win32-GUI-Users mailing list >>> Per...@li... >>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>> http://perl-win32-gui.sourceforge.net/ >>> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to share your >> opinions on IT & business topics through brief surveys -- and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Perl-Win32-GUI-Users mailing list >> Per...@li... >> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> http://perl-win32-gui.sourceforge.net/ >> > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > |
From: Steve L. <ste...@sc...> - 2006-08-03 19:31:48
|
Huraah! Proof I`m not going mad :) I`d be more than happy to test it out. /me goes off to backup current files. Steve > I've had a quick look at the source, and it appears there is indeed a > leak, which matches your described symptoms: > > - If there is no transparency in the image, then AlphaCOpyToDC uses > exactly the same code as CopyToDC, so no leak. > - As soon as there is some transparency, then it looks like it will leak > about the size of the bitmap (width of bitmap * height of bitmap * 4 > bytes per call plus a bit of overhead). > > The fix is simple. I'm hoping to get a beta release of 1.04 (which I > will add this fix to) up for download later today - you might like to > download it and see if it fixes this problem? > > Regards, > Rob. > > Steve Loughran wrote: >> OK, some more on this memory leak issue. >> >> If I change the code from using AlphaCopyToDC() to using CopyToDC() >> (Havent changed anything else in the code at all), the memory leak >> stops... completely. If I put AlphaCopyToDC() back in again, the leak >> reappears. >> >> Odd.... i`ll try to write a small code sample with some images and put >> them all in a zip so someone else can try it (just to save my sanity). >> >> Is Laurent Rocher a subscribed member on the win32-gui mail list? >> >> Steve >> >> >> Steve Loughran wrote: >>> Strict - yes, all the time >>> warning - most of the time :) >>> >>> I think I have tracked the leak down to the window_paint routine, and >>> specifically to the DIBitmap routine AlphaCopyToDC(). I need to do >>> some more fixed tests, but to me it looks like a problem with Alpha >>> channels in DIBitmap structures, or maybe just DIBitmap structures >>> loaded from PNG files.... or both :) >>> >>> In window_paint, I call AlphaCopyToDC() to paint a solid image into >>> the $memDC (no memory leak), but when I use the same routine to paint >>> a load of smaller images that contain transparency layers via >>> AlphaCopyToDC() into the $memDC, the memory leak starts appearing. If >>> I comment out just this one call from the foreach loop (and leave >>> everything else running), the leak doesnt happen. >>> >>> - Active Perl 5.8.6 >>> - Win32-GUI-DIBitmap [0.15] >>> >>> Need to find some transparent images to use as background image, and >>> see if the leak starts again. >>> >>> Steve >>> >>> Emmanuel E wrote: >>>> are you already using use strict? if not use it and cleanup every >>>> warning. >>>> >>>> threads generally have all kinds of memory problems so if ur using >>>> threads life becomes very difficult. >>>> >>>> Steve Loughran wrote: >>>>> Hi all >>>>> >>>>> Not strictly a win32-gui related question. How would I go about >>>>> tracking down my memory usage in a perl script? I have a small >>>>> memory leak in my code somewhere, but no idea where to start >>>>> looking for clues. >>>>> >>>>> Anyone got any pointers or tips? >>>>> >>>>> Steve >>>>> >>>>> ------------------------------------------------------------------------- >>>>> >>>>> Take Surveys. Earn Cash. Influence the Future of IT >>>>> Join SourceForge.net's Techsay panel and you'll get the chance to >>>>> share your >>>>> opinions on IT & business topics through brief surveys -- and earn >>>>> cash >>>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>>>> >>>>> _______________________________________________ >>>>> Perl-Win32-GUI-Users mailing list >>>>> Per...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>>>> http://perl-win32-gui.sourceforge.net/ >>>>> >>>>> >>>>> >>>> ------------------------------------------------------------------------- >>>> >>>> Take Surveys. Earn Cash. Influence the Future of IT >>>> Join SourceForge.net's Techsay panel and you'll get the chance to >>>> share your >>>> opinions on IT & business topics through brief surveys -- and earn cash >>>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>>> >>>> _______________________________________________ >>>> Perl-Win32-GUI-Users mailing list >>>> Per...@li... >>>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>>> http://perl-win32-gui.sourceforge.net/ >>>> >>> ------------------------------------------------------------------------- >>> >>> Take Surveys. Earn Cash. Influence the Future of IT >>> Join SourceForge.net's Techsay panel and you'll get the chance to >>> share your >>> opinions on IT & business topics through brief surveys -- and earn cash >>> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >>> >>> _______________________________________________ >>> Perl-Win32-GUI-Users mailing list >>> Per...@li... >>> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >>> http://perl-win32-gui.sourceforge.net/ >>> >> >> ------------------------------------------------------------------------- >> Take Surveys. Earn Cash. Influence the Future of IT >> Join SourceForge.net's Techsay panel and you'll get the chance to >> share your >> opinions on IT & business topics through brief surveys -- and earn cash >> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV >> _______________________________________________ >> Perl-Win32-GUI-Users mailing list >> Per...@li... >> https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users >> http://perl-win32-gui.sourceforge.net/ >> > |
From: Erik K. <er...@ki...> - 2006-08-17 05:49:30
|
There is Win32::SystemInfo where you can track memory. But that only works if you don't have a leak but a sinking ship :). From the POD: MemoryStatus Win32::SystemInfo::MemoryStatus(%mHash,[$format]); %mHash - The hash that will receive the results. Certain values can be set prior to the call to retrieve a subset. (See below) $format - Optional parameter. Used to set the order of magnitude of the results. (See below) Determines the current memory status of a Win32 machine. Populates %mHash with the results. Function returns undef on failure. Values returned through the hash: MemLoad - Windows NT 3.1 to 4.0: The percentage of approximately the last 1000 pages of physical memory that is in use. - Windows 2000: The approximate percentage of total physical memory that is in use. TotalPhys - Total amount of physical memory (RAM). AvailPhys - Available physical memory (RAM). TotalPage - Allocated size of page (swap) file. AvailPage - Available page file memory. TotalVirtual - Total physical + maximum page file. AvailVirtual - Total amount of available memory. Values returned through the hash can also be specified by setting them before the function is called. my %mHash = (TotalPhys => 0); Win32::MemoryInfo::MemoryStatus(%mHash); Will return only the total physical memory. MemoryStatus return values in bytes by default. This can be changed with the $format parameter. Valid values for $format are: B - Bytes (default) KB - Kilobytes MB - Megabytes GB - Gigabytes Citeren Steve Loughran <ste...@sc...>: > Hi all > > Not strictly a win32-gui related question. How would I go about tracking > down my memory usage in a perl script? I have a small memory leak in my > code somewhere, but no idea where to start looking for clues. > > Anyone got any pointers or tips? > > Steve > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys -- and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ > ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. |