I am currently having a performance issue with a .NET application I am working on. The application consists of a Windows Service which spawns a number of controller objects. Each of these controllers has a Start method which is executed on a new thread.
The Start method looks a little bit like this: while (_running) { bool opSuccess = listener.FindMessage(ref messageData, ref messageFound); if (opSuccess && messageFound) { opSuccess = processor.ProcessMessage(ref messageData); } if (opSuccess) { opSuccess = dispatcher.DispatchMessage(ref messageData); } } The listener object is configured to look in a certain place (normally a MessageQueue) for some data to be processed. The processor object does some work on that data and the dispatcher object sends it off to another MessageQueue. Here's the thing. The listener, processor, dispatcher and messageData objects are all COM objects which each implement a certain custom COM interface (IListener, IProcessor etc). I think this is what may be killing the performance of the app. With more than 2 or 3 controller objects (and therefore threads) running the throughput is lousy - 1 message every 4 or 5 seconds. The "Number of Marshals" .NET performance counter climbs to around 8000 after about 1 minute of the app running. My suspicion is that with more than 2 or 3 controller objects executing, there is just far too much marshalling from managed to unmanaged code, and vice versa. The service I'm writing is intended to be a replacement for a VB6 app which has much the same functionality, hence the "legacy" COM components. All of these components are coded in VB6 also. Can anybody shed some light onto whether my suspicion is correct or not? Thanks in advance Simon Jefford ________________________________________________________________________ This email has been scanned for all viruses by the MessageLabs Email Security System. http://www.messagelabs.com ________________________________________________________________________