RecyclerMM Public Release 2 - 26/07/04 - Eric Grange egrange@glscene.org RecyclerMM is an alternative memory manager for Delphi, to use it, add "RecyclerMM" to the uses of your project as *first* unit. The purpose of RecyclerMM is to provide: - Improved performance (mileage may vary from a few percents to several orders of magnitude, depending on application) - highly-aligned memory blocks, suitable for SSE operation - high resilience to memory fragmentation - fast 'Allocated' testing (see below) - shared memory (like ShareMem, but no special DLL required) - no memory management data hidden before or after the allocated blocks The features and behaviours of the memory manager can be tweaked via compile-time options in RecyclerMM.pas (see there for details). Besides benchmark situations, improvements where noticed in the following "real-world" test applications: - XML DOM parser : about 30 to 1000% (higher figures on larger XML files) - OLAP Cube compiler : several orders of magnitude faster on large datasets (default manager would fragment heavily and use hundreds of MB) - Entity Flow Simulator : about 20% (coming from increased cache coherency, all allocations happen once, before the simulation is run) - FTP server : constant memory use under heavy multithreading (default manager would fragment over time, use more and more memory, enter swapping hell, etc.) A webpage on these applications will be setup once authorization from the parties involved is received and time is found... especially time, volunteers welcome :) What hasn't been tested/optimized in this version: - out of order DLL loading/unloading - multi-CPU performance - platforms other than Win98/NT/XP/Win2k/Win2k3 Only downside found so far is an extra memory consumption (when default memory manager wouldn't fragment at all), along with a one-time hit at startup (about 1-2 MB, depending on options), so reports of cases where performance goes down would be welcome. Using FRMMUsageSnapShot: This form can provide a view of the state of the RMM (a "SnapShot"), to use it, instantiate it or use the autocreate function, invoke "Show", then "Display" each time you want it refreshed. The Display function takes a structure in parameter, which is obtained from the RecyclerMM unit via the "RMMUsageSnapShot" function. Using "Allocated": RecyclerMM exposes an 'Allocated' function which takes a pointer or object, and that will return True if the memory is allocated, False if it isn't. This test happens at high speed and does not rely on information hidden before/after the block, and thus will be quite robust to wild pointers or buffer overruns/underruns. --- Any reports of use are welcome, the more applications report improvement (or lack of), the more RecyclerMM can be improved! Eric Grange