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.

Reply via email to