On 2018-01-09 01:29, Ryan Joseph wrote:
What does this have to do with generics exactly?

Everything I guess. ;-) That was the point of my reply.

When using the Generics.Collections unit of Delphi I can define a list class that can hold Integer data types, by doing the following:

  var
    IntList: TList<Integer>;
  begin
    IntList := TList<Integer>.Create;
    IntList.Add(12345);

How Generics does that (how it is implemented underneath), I don't know - I never bothered to look. All I'm saying is that in our company the developers love Generics, but then can't understand why performance degrades is some areas of our project. Further testing revealed that the usage of Generics was partly to blame.

I then investigated this, and compared some of those lists, and implementing the equivalent manually (using TList, TObjectList and such). For example, the above code example can be accomplish with a TList only.

  var
    IntList: TList;
  begin
    IntList := TList.Create;
    IntList.Add(Pointer(12345));

Yes, the second code sample might not look so nice (the casting), but it was just the simplest and quickest example I could knock up to store integers in a list. Either way, the non-Generics code example was considerably faster in adding and freeing itself.

This was just one example. TObjectList (or a customised descendant... eg: TAddressList) was another case where it was way faster than Generics.Collections.pas unit provided.

Like I said, this was all tested under Delphi XE3. I didn't have time today to test under FPC, but will try and do so tomorrow.


Regards,
  Graeme

--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/

My public PGP key:  http://tinyurl.com/graeme-pgp
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to