ICS, Indy9, Indy10 comparsion


I am wondering which IP componentset to choose. I know the basic differences, but there could be more than I can think of. My main concerns are performance and reliability.

What do you Experts think?

(I know it  depends on what I need it for. Right now for a Database engine to communicate with the clients and other servers. The number of concurrent clients can be between 10 - 2000.  The DB core has a 1 core thread/CPU structure. Each core thread schedules the execution of several concurrent queries (fibers) )

Thanks, Leslie

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Hi Leslie

Indy 9 is resonably stable, with a few glitches here and there, but mostly ok and works very nicely.
The one glitch is that some of the servers don't like running for long periods on some of the ops (specifically setup) that i have tried. (like 98)

Indy 10 is quite stable, but not without a bug or two.  Its abilities are vastly improved over Indy 9, and some new components as well.
You shouldn't have a problem with the many connections as long as you set it up correctly.

I am afraid that I have not had experience with ICS, but Indy 10 is extremely user friendly and very well documented.
Also you have the option of purchasing priority support for Indy (which is very nice).

What version of Delphi are you using?
If you are using 2005/6 then have you considered carefully what you are doing?
I think that in 2005/6 it would be much better to use the .Net remoting built into delphi.

Leslie7Author Commented:

Sorry for the very late reaction.

I am using D7 & 2005, but .Net is not an option for me at the monent.

I did some  performance comparsion between MyEngine + Indy10 and Interbase. The Engine is at least 2 times faster then Interbase when  TCP communication is not used. But Indy 10 is more then twice slower what Interbase uses for net communication.  All the effort to make a fast Engine is lost, if the TCP communication is  so slow. Any Idea what can be the difference or what to use to make it at least as fast as Interbase?  
TheRealLokiSenior DeveloperCommented:
Firstly, I've used Indy 8-10, and also ICS. My personal preference is for ICS.

To improve the performance in comparison to firebird, do the following :-
TRIM chars/varchars
  varchar(128) but only contains 10 characters. Firebird will send all 128, you should send only the length, and the 10 characters

STREAM the sending. Do not use WriteLn() or equivalent. Streaming is faster.. build a buffer of each record (for example) and send the whole record when ready. (WriteStream in Indy for example)

use a decent buffer size, e.g. 8k buffer size.
Fill the buffer if you can
e.g. if you have 10 records to send at 1k each, stick 8 in the first buffer, send it (writestream in indy for example), and send the last 2 in the next stream

This is guaranteed to be faster than firebird, if only for the simple fact about varchars

hth, Loki

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

TheRealLokiSenior DeveloperCommented:
Oh, to answer your initial question,
either set (ICS or Indy) will perform fast enough for this project. I've done performance tests with 10000+ connections on both component suites, only settling on ICS because of its' reduced server load (did not require the overhead of threads), and the fact that the author waas more active in the newsgroups when I required assistance.
Leslie7Author Commented:
Hi Loki!

It is  pleasent suprise to receive a comment for such an old Q. :)

And it is excellent timing aswell, since I have just started to explore ICS. And I am suffering from the lack of help files and documentation. Do you have links where to find good resources on ICS? Maybe examples beside the ones at Overbyte ...

Do you have any clue why is Indy10 more 2 times slower then IB6 when transfering a table of 280.000 records in a very simple test?  (The problem is surely the transfer.)

Is there anything else I should consider beside Indy and ICS?

Are all solutions built around the MS Windows socket technology?  

I am undecided yet if this should become a stand alone commercial product, or just for internal use. It is really much-much faster compered to IB6. Though have not compared to other db engines yet. If I can keep the speed when all functionalty will be implemented, it could find its share on the market. The fast and reliable LAN/WAN connection is essential ...  Linux should be targeted aswell ...  

Leslie7Author Commented:
I think you probably  have already answered the Indy10 speed Q: I should use streams. :)
Leslie7Author Commented:
Do you happened to know, what technology IB/Firebird use for LAN?
TheRealLokiSenior DeveloperCommented:
not off hand, the source for IB6 (c++ i believe) is freely available, but I have not looked at what it was using. I know it is TCP port 3050 though.
You might get a small increase in speed if you handled the socket code yourself, but it's not worth it imo, just use ics or indy, the learning curve is huge.
ICS has a newsgroup elist you can subscribe to and search
The author is quite active in it, and there's a lot of knowledge there
Leslie7Author Commented:
I have got it working with ICS, and I am begining to like it more and more. In everage it is about two times faster then Indy (though I have not tried Indy with streams) .  Also ICS uses much less CPU time on the server and the client aswell.

The test results with 286.000 records:
Indy10 : 11-12 mp      Avg: 11,3 mp
IB6      :  5,7 - 15 mp  Avg: 5,9 mp
ICS      : 3,2 - 6,2 mp  Avg: 5,5 mp

I do not understand why is there such a huge dispersion with IB6 nad ICS while Indy performs on the same level.


Indy and ICS are built around WINSOCK, which is included in windows. Is there any alternative for WINSOCK?

Leslie7Author Commented:
mp = Second :)
TheRealLokiSenior DeveloperCommented:
hmmm. not sure. It'd be above my skill to write a TCP stack without winsock.
You can speed things up further by using a protocol with less error correction, e,g, UDP or a custom layer, but then you'd no doubt want to build some error checking back into it.
UDP is a sort of "send and dont care if it gets there or not", but you could attach a sequence/crc number into the packet and only resend if it gets lost/corrupt.
If you have a reliable network you can probably do this and gain some speed, but if you're using the internet, I'd expect some problems outside of your control, and would personally stick with TCP, and I really only know how to do so with winsock
Leslie7Author Commented:
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.