Are you sure that the bottleneck is MSMQ? My understanding is that if you use a non-transactional private queue, then under most circumstances the message does not hit disk. This article [1] indicates that non-transactional queues are an order of magnitude faster than transactional queues. Also, you should to set PROPID_M_DELIVERY to MQMSG_DELIVERY_EXPRESS (sorry, haven't used the .NET classes for message queueing and I don't know the object model).
Several years ago I wrote a system that is similar to what you describe: an ISAPI broker would accept XML messages (1-75k) from clients, route them to the proper private queue for processing. The worker processs would chew on the messsage (insert/update/delete + business logic) and post a message to a response queue. The broker would pick up the response and route it back to the client. Throughput on the system was very good (I forget the exact numbers). HTH, Sean [1] ms-help://MS.VSCC/MS.MSDNVS/dnmqqc/html/msmq.htm -----Original Message----- From: Moderated discussion of advanced .NET topics. [mailto:[EMAIL PROTECTED] On Behalf Of s Sent: Wednesday, June 04, 2003 6:01 PM To: [EMAIL PROTECTED] Subject: [ADVANCED-DOTNET] Shared Memory Implementation? I have an asynchronous class for doing DB updates and inserts. The client passes the data to a queued component, the work gets done, and the QC puts the result into another Message Queue. The client repeatedly checks the Message Queue for a result at will (a web page simply refreshes saying "checking" ... "checking" until a result is found in the queue or the web user gives up or 10 retries). I was thinking about the slowest part of the app and it appears to be the disk-bound MSMQ. Can anyone recommend a shared memory implementation or "memory queue" I could use to hold this async-worker result messages? While I think the return messages would be in the area of 1k, for the sake of argument let's say it could be 16k and there could be a few hundred of these in memory at any given time. I'm willing to forego the guaranteed delivery/safety of MSMQ for speed in this case. Plus I want to learn how it would/could be done. :) Where could I look into that kind of thing for the .NET Framework? Thanks.