Создание пула рабочих потоков для не поточно-безопасного кода - PullRequest
1 голос
/ 16 декабря 2009

Как лучше всего обернуть не-потокобезопасный код в .net framework?

У меня есть сторонняя библиотека, которая не поддерживает потоки из-за использования статических переменных. Переписать это не вариант. Эта библиотека используется веб-службой asp.net, которая принимает множество одновременных вызовов.

В настоящее время я завернул его в прокси-класс, который использует блокировки для обеспечения безопасности потока:

private static readonly object oneThreadAtATimePlease = new object();
public ISomething CalculateSomething(int someValue)
{
    lock (oneThreadAtATimePlease)
    {
        return new UnsafeLibrary(someValue).DoSomething();
    }
}

Производительность низкая, так как нескольким абонентам приходится ждать блокировки, но результаты верны.

Я бы хотел повысить производительность, запустив несколько экземпляров этой библиотеки, каждый в своем собственном домене приложений. Это разумный подход? Любой хороший пример кода, чтобы рекомендовать?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009

Вы также можете попытаться создать приложение на основе сообщений, используя очередь.

Тогда несколько потоков могут ставить запросы в очередь, и один отдельный поток может работать в этой очереди и уведомлять другие потоки о результатах. Использование класса монитора не всегда самый быстрый способ.

Домены приложений являются опцией. Однако вам придется иметь дело с МПК.

0 голосов
/ 16 декабря 2009

А как насчет Singleton, содержащего только один экземпляр рабочего объекта, плюс очередь запросов?

0 голосов
/ 16 декабря 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...