Archive for December, 2007

Get Current Process Memory

Thursday, December 27th, 2007

Want to know how much memory your program is using? This Delphi function will do the trick.

uses psAPI;
{...}
function CurrentProcessMemory: Cardinal;
var
  MemCounters: TProcessMemoryCounters;
begin
  MemCounters.cb := SizeOf(MemCounters);
  if GetProcessMemoryInfo(GetCurrentProcess,
      @MemCounters,
      SizeOf(MemCounters)) then
    Result := MemCounters.WorkingSetSize
  else
    RaiseLastOSError;
end;

Update: Thanks to Andreas for a heap free (no GetMem / FreeMem) method of doing this (via his comment!)

Not sure where I got the basics of this, but I added some better error handling to it and made it a function. WorkingSetSize is the amount of memory currently used. You can use similar code to get other values for the current process (or any process). You will need to include psAPI in your uses statement.

The PROCESS_MEMORY_COUNTERS record includes:

  • PageFaultCount
  • PeakWorkingSetSize
  • WorkingSetSize
  • QuotaPeakPagedPoolUsage
  • QuotaPagedPoolUsage
  • QuotaPeakNonPagedPoolUsage
  • QuotaNonPagedPoolUsage
  • PagefileUsage
  • PeakPagefileUsage

You can find all of these values in Task Manager or Process Explorer.

Maybe this would be a good task for one of Delphi’s new records that include methods. . . .

It would appear

CodeRage II -> Delphi Robot Rage final standing

Sunday, December 9th, 2007

The official standing of the bots was given during the live broadcast of the final session. Although if you run the bots in a new battle, chances are a different bot may win. There certainly is a bit of luck involved. Never the less, these are the official results.

  • 1st Place – Brian Thoman and Codralis of WideOrbit Inc. in Lynnwood, WA
  • 2nd Place – Michael Madsen and Kisai of Logos Consult in Denmark
  • 3rd Place – Ken Adam and Akadamia of Akadamia Ltd in Midlothian, UK

Thanks to everyone who entered a bot! I’ll be arranging the prizes with you all shortly. Thanks to all of the prize contributors too. A special thanks to everyone at CodeGear who made CodeRage possible!

Bot profiles and other details will continue to be posted.

At this point I am not posting the last battle recording. The quality was terrible, and most everyone can run their own battle with the bots and D-Robots (possibly reaching a different outcome though. . . )

C64 turns 25

Friday, December 7th, 2007

Thanks to Anders for letting me know the Commodore 64 turned 25!

I was a big fan of the C64, but I didn’t know you could get Pascal for it. My programming was limited to Commodore Basic, but that was when I cut my teeth on programming and knew what I wanted to do when I grew up.

I didn’t know Anders was using WordPress either until I read that post.

List of 3rd Party Components for Delphi 2007

Friday, December 7th, 2007

My thanks to Andreano Lanusse, the Product Line Manager for Latin America at CodeGear, who just posted a list of 3rd Party Components for Delphi 2007. This is a great resource. Andreano is open to suggestions and feedback on his list too and has provided his email address for everyone.

This has long been one of the strengths of Delphi – the strong collection of 3rd party components. 3rd party component development was of course fostered by the fact that Delphi came with full source for the VCL and RTL. A move the Microsoft if finally duplicating in releasing the source for the .NET framework. Although unlike Delphi, Microsoft will not allow you to modify and recompile the framework in your applications. With Delphi you can tweak the VCL and recompile it (not a trivial task, but allowable and possible) for your applications. Granted doing so makes moving to new versions of Delphi a little more tricky, and you cannot redistribute the modified source.

BTW, notice the link to my TurboPower page on line 27.

Multi-Class Class Helpers

Monday, December 3rd, 2007

This is cool. I figured out a way to assign the same class helper to multiple classes in Delphi 2007. Marco Cantu asked me if I knew how to do this during CodeRage II, and then David I. mentioned that Class Helpers should be used to implement Aspect Orientated Programming (AOP), but since they don’t support assigning the same class helpers to multiple classes that wouldn’t work.

I’ll write this up later. It isn’t a best case scenario, and requires a few extra lines of code, but it accomplishes what I set out to do, and that is pretty dang cool! Hopefully later CodeGear will extend class helpers and make this and other cool stuff easier. . .

Exceptions in Constructors and Destructors

Monday, December 3rd, 2007

Check out Alister Christie’s latest movie on CodeGearGuru.com. He covers the elusive Exceptions in Constructors and Destructors. Thanks Alister. That was one of the questions from my Exceptional Exceptions session that I needed to follow up on.