У меня есть библиотека С#, которая обрабатывает некоторые файлы. Я создал консольное и настольное приложение, которое использует библиотеку и обрабатывает 256-мегабайтный файл примерно за 1 минуту. Затем я создал службу WCF, размещенную в службе Windows, которая использует одну и ту же библиотеку обработки файлов, но занимает 10 раз дольше, чтобы обрабатывать один и тот же файл 256mb при вызове с веб-сайта. Служба Windows работает под учетной записью домена с правами администратора.
Накладные расходы при вызове службы WCF очень быстры, но метод LoadFile занимает гораздо больше времени. Я попытался увеличить приоритет процесса во время запуска через
Process.GetCurrentProcess ().PriorityClass = ProcessPriorityClass.High;
безрезультатно. Я запустил эту службу на 64-битной настольной системе Win7 (6 Гб), 2003 XP 32bit server (4gb) и 32-битном сервере R2 R2 (4bg) с одинаковыми результатами. Консольные и настольные приложения обрабатывают файл примерно за 1 минуту в указанной выше системе. Процесс, похоже, не ограничен памятью и входит в swapville.
Службы Windows каким-то образом связаны с процессом? Получаю ли я лучшие результаты работы службы WCF в IIS?
EDIT: Я попытался вызвать библиотечный каталог с веб-сайта, и это тоже занимает 10 раз больше, чем консольное или настольное приложение.
ОБНОВЛЕНИЕ: Оказывается, это был Log4PostSharp. Консольные и настольные приложения не имели никаких следов log4net в конфигурационных файлах, но веб-сайт и служба Windows. Был log4net TraceAppender, бесшумно потребляющий ценные циклы процессора.