IDE FixPack, DDevExtension and AsyncCalls updates for 2009/2010/XE

By | September 12, 2010

Let’s start with AsyncCalls 2.96. It is a small update that adds Delphi XE support and a feature that I should have added when I ported it to Delphi 2009. The cdecl-functions now support the UnicodeString type.

DDevExtension 2.1 adds support for the new RAD Studio XE. It took me some time to adjust all the non-ToolsAPI accesses to the IDE. It is mainly a bugfix release with the addition that you can now change the main icon for all projects in the “Set Versioninfo”-dialog.

With this release of IDE FixPack 3.5 some performance optimzations from the “old” DelphiSpeedUp have found their way into the IDE FixPack. RAD Studio XE is fast, but there are still some performance problems in it. Last weekend I had a discussion with somebody in a German Delphi forum who had the problem that switching from the code editor to the form designer takes more than 5 seconds in Delphi 2010 and XE. He has a lot of components installed. Removing the Component Toolbar package had brought little. So I asked him to start Delphi with Delphi and press the F12 key (break point) when the IDE switches from the code editor to the form designer. He gave me the call stack and I saw the “System.LoadResString” call. I remembered that I once had written a LoadResString cache for DelphiSpeedUp to make the compile progress dialog work faster (It called LoadResString million of times for the same resource string. That bug was fixed with Delphi 2009). So I decided to bring the ANSI-LoadResString cache into the Unicode world. With the LoadResString cache in place switching between code editor and form designer became instantaneous.

And while I had the DelphiSpeedUp project open, I thought “why not port some other optimizations”. And so I added a GetDynaMethod function that uses a binary search for finding methods in the DMT (dynamic method table = message WM_xxx, dynamic), made the TObject.ClassNameId function work a lot faster for classes with only ASCII-characters in their name and I runtime-patch the IDE compiler for making the call stack processing faster if you have functions with interface parameters.


procedure Test(Intf: IInterface);
begin
  Test(Intf);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Test(Self);
end;

If you execute this code you get an EStackOverflow exception, the IDE pauses the program but you can’t click anywhere because the IDE doesn’t react anymore. The dcc140.dll runs in circles to find something. It took 4 minutes until the IDE was reacting again. This only happens with interface parameters. For TObject parameters there is no problem. With the F12 key I was able to find the problem and to disable the outer loop in the compiler. The loop didn’t find what it was searching for anyway, it always executed the “not found” code putting a “Pointer(” in a buffer, that is the start of “Pointer($xxxxxxxx) as IMyInterface”).

This bug isn’t present in Delphi XE anymore and Delphi XE shows the actual class behind the interface (“TForm1($xxx) as IInterface”) not that “Pointer(…)” thing. Delphi XE is really a performance and stability release, letting not much room for my bug fixes and performance tweaks.


But where is IDE FixPack 3.5 for RAD Studio 2007, where is DDevExtensions 2.1 for RAD Studio 2007?
I don’t actively use Delphi 2007 anymore. The performance optimizations (except for the call stack) are already in DelphiSpeedUp 2.8. And I don’t have the time to support all versions of Delphi, especially with the Unicode break between Delphi 2007 and 2009. Before that it was more or less a compile and test to get a patch working in one of the older IDEs. With the Unicode break it is: port the code, compile, error, do the research again, compile, test. Doing the research is fun (for me) but only if I do it once. If I have to do it twice it is not that much fun anymore, actually it is boring.


There is a development snapshot from last year for those who really want a DDevExtensions 2.0 for RAD Studio 2007:
DDevExtensions 2.0 snapshot for RAD Studio 2007 (2009-09-20)


Downloads:

Name IDE Version File Size Downloads Added
IDE Fix Pack 6.4.2 2009 (UP4) IDEFixPack2009Reg64.2.7z 242.75 KB 5801 times 2019-03-23
IDE Fix Pack 6.4.2 2010 (UP5) IDEFixPack2010Reg64.2.7z 237.09 KB 6604 times 2019-03-23
IDE Fix Pack 6.4.2 XE (UP1) IDEFixPackXEReg64.2.7z 221.38 KB 4115 times 2019-03-23
IDE Fix Pack 6.4.2 XE2 (UP4+HF1) IDEFixPackXE2Reg64.2.7z 316.78 KB 4534 times 2019-03-23
IDE Fix Pack 6.4.2 XE3 (UP2) IDEFixPackXE3Reg64.2.7z 257.4 KB 3665 times 2019-03-23
IDE Fix Pack 6.4.2 XE4 (UP1) IDEFixPackXE4Reg64.2.7z 260.1 KB 3270 times 2019-03-23
IDE Fix Pack 6.4.2 XE5 (UP2) IDEFixPackXE5Reg64.2.7z 257.7 KB 3782 times 2019-03-23
IDE Fix Pack 6.4.2 XE6 (UP1) IDEFixPackXE6Reg64.2.7z 423 KB 3462 times 2019-03-23
IDE Fix Pack 6.4.2 XE7 (UP1) IDEFixPackXE7Reg64.2.7z 429.48 KB 4630 times 2019-03-23
IDE Fix Pack 6.4.2 XE8 (UP1) IDEFixPackXE8Reg64.2.7z 431.7 KB 3909 times 2019-03-23
IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1) IDEFixPackD10Reg64.2.7z 428.33 KB 5398 times 2019-03-23
IDE Fix Pack 6.4.2 10.1 Berlin IDEFixPackD101Reg64.2.7z 430.65 KB 5983 times 2019-03-23
IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3) IDEFixPackD102Reg64.2.7z 426.27 KB 9443 times 2019-03-23
IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2/3) IDEFixPackD103Reg64.4.7z 444.98 KB 17893 times 2019-08-01
Name IDE Version File Size Downloads Added
DDevExtensions 1.61 5-2007 DDevExtensions161Setup.zip 734.07 KB 20359 times 2009-01-10
DDevExtensions 2.8 Features PDF DDevExtensionsFeatures.pdf 602.92 KB 18244 times 2014-12-27
DDevExtensions 2.4 7, 2007 DDevExtensions24Setup7_2007.zip 535.41 KB 13312 times 2011-07-25
DDevExtensions 2.86 2009-10.3 DDevExtensions286.7z 1.24 MB 6214 times 2020-05-30
DDevExtensions 2.88 2009-10.4.2 DDevExtensions288.7z 1.3 MB 5594 times 2021-07-20
Name IDE Version File Size Downloads Added
AsyncCalls 2.99.1 5-10.1 Berlin AsyncCalls.zip 35.82 KB 3479 times 2016-08-15


BTW: Don’t forget to disable the Component-Toolbar package if you don’t use it, have many components installed and want to switch faster from Code to Design view.

11 thoughts on “IDE FixPack, DDevExtension and AsyncCalls updates for 2009/2010/XE

  1. Uwe Raabe

    Nice! Just downloaded.

    One question: the change to TAsyncCallThread.Execute looks a little bit half-baked to me (especially as it is not mentioned anywhere). The way it is written now, you can as well get rid of the complete try-finally frame together with the CoInitialized variable. Is this by intention?

  2. Andreas Hausladen Post author

    Thanks Uwe. I have uploaded a new version 2.96 that enables the CoInitialize call. The change must have been a relict from a debug session.

  3. Pingback: IDE FixPack 3.5、DDevExtension 2.1が公開されました。 « 山本隆の開発日誌

  4. Eric

    Thanks Andreas!
    Any plans for adding a kibitz compiler canceler for Delphi XE? I reckon the delays and freezes have become worse with XE.

  5. Bo

    Being able to switch between code and designer window in an instant, should be one of the top priorities of any Delphi version, thanks for this !

  6. Dave Speight

    Great as usual Andy. However the compile progress bar reaches the max too early on a Build on DXE (for me). It appears at first glance to be using the number of units needing recompilation as a max rather than the total number of units (just my guess). The progress during a Compile works fine…

  7. Andreas Hausladen Post author

    The progress bar uses the number of project units for the Max property. If the compiler opens the corresponding *.pas or *.dcu file it markes the file as compiled and recalculates the Position property. Now if the Delphi XE compiler opens all files before doing the actual compile this algorithm doesn’t work anymore.

  8. Andreas Hausladen Post author

    @Mark: This tool shouldn’t be named Distiller because that’s the name of another tool that is illegal. This tool improves the startup time by removing/disabling packages what makes the IDE a better Nodepad with some remaining standard components.

  9. Mark

    The word “Distiller” is not copyrighted by a hacker. Indeed, the IDE is a better notepad (let’s say a Delphi 7 notepad). That’s exactly what I need: A fast reliable IDE as the Delphi 7 IDE was.

Comments are closed.