2013-09-19 2 views
1

Я не в состоянии использовать параллельные потоки в моем приложении (C# приложений), поскольку каждый Msmq сообща это данные для SQL StatementКак увеличить производительность MSMQ Receive() без использования нескольких потоков

Приложение C# потребляет сообщения в msmq, а затем обрабатывает его.

Я использую msg.Recoverable = true, чтобы предотвратить потерю данных при отключении сервера. В настоящее время это транзакционное сообщение.

Сообщение MSMQ (SQL заявление) должно быть обработано в порядке, в последовательности (FIFO)

Использование нескольких потоков к потреблению является не-нет, как не в состоянии контролировать, какой поток будет потреблять и выполнять какой SQL заявление.

В настоящее время скорость приема() для сообщения msmq 490 КБ составляет около 0,016-0,032 с, что составляет около 30-50 Тх/сек, что неприемлемо.

В настоящее время, MSMQ получить является узким местом всего приложения

Сервер находится на Windows Server 2008 R2

и приложение получает (Receive()) с локального сервера MSMQ, не удаленный

+0

Почтовый индекс. Как обрабатывать SQL-запросы? – Paparazzi

+0

Сначала я делаю Peek, а затем выполняю sql-инструкцию, если SQL-оператор успешно выполнен, я получаю(). В настоящее время Peek() занимает 0 сек. Выполнение sql-заявки занимает 0 сек, Receive() занимает 0.016 с-0.032 сек. Очевидно, что для операторов sql они должны выполняться FIFO, (для операторов обновления) –

+0

Код уже оптимизирован до максимального значения, в настоящее время вопрос заключается в том, как еще больше повысить производительность MSMQ Receive() –

ответ

1

Я не эксперт, но я думаю, вы можете попробовать использовать пакетную - http://msdn.microsoft.com/en-us/library/ms788973.aspx

+0

. WCF с MSMQ, но я думаю, что пакетная обработка возможна с помощью прямого API MSMQ. – Nikolay

+0

не понимают, как использовать пакетное приложение для консольного приложения C#, есть ли другие способы увеличить его производительность, кроме изменения кода? –

+0

, в настоящее время использующий не транзакционные очереди, и используя строку, которая должна быть выбрана в msg.Body вместо Object, Receive() улучшена до 100 транзакций/сек. Как я могу улучшить производительность Receive()? Как изменить эти свойства http://msdn.microsoft.com/en-us/library/windows/desktop/ms705262(v=vs.85).aspx в моем приложении консоли C# –

Смежные вопросы