Назад | Перейти на главную страницу

Печать с C # с использованием слишком большого количества дескрипторов

У меня очень простое приложение, которое печатает файлы TIFF на различных сетевых принтерах. Все принтеры установлены на 3 разных серверах печати, а приложение работает на отдельном компьютере. (Назовем их Print1,2,3 и App1.)

В большинстве случаев это работает хорошо, но в последнее время я заметил, что некоторые новые принтеры (модель HP P4515x с драйверами PCL6) вызывают всплеск количества дескрипторов, открываемых spoolsv.exe в App1. Один документ может поднять дескрипторы на 500, и они никогда не публикуются, что в конечном итоге приводит к перезагрузке компьютера App1, если это не было обнаружено вовремя. Похоже, эта проблема не затрагивает ни один из реальных серверов печати.

Код делает что-то очень похожее по концепции на этот, но из фоновой службы, работающей под учетной записью домена: Ссылка MSDN. Я указываю принтер, используя соглашение об именах \ print3 \ deptP4515x.

[Не уверен, что это происходит в StackOverflow или ServerFault, но я думаю, что из-за возможной проблемы с драйвером это должно быть здесь?]

РЕДАКТИРОВАТЬ: Я запустил процедуру и увидел, что из 1243 дескриптора, до которого он вырос, 1135 это: Key HKLM \ SOFTWARE \ Hewlett-Packard \ San Diego Shared IO

Попробуйте воспроизвести проблему с помощью другого драйвера, например HP LaserJet 4 или 4100 PCL. Используйте встроенный драйвер, а не специальный драйвер, предоставляемый поставщиком.

Если проблема возникает с этими драйверами, вероятно, проблема не в драйвере P4515.

Найдите папку% systemroot% \ system32 \ spool \ drivers, выполнив поиск файлов hpbmini.dll и hpcdmc32.dll. Известно, что старые версии этих файлов вызывают серьезные проблемы при печати.

Вы используете Dispose () своих объектов PrintDocument? Это частое упущение в примерах MS .NET.

Проверьте код приложения. Убедитесь, что подключения к принтеру созданы внутри using заявления. В противном случае не гарантируется, что управляемый код закроет их вовремя, и то, насколько быстро будут выпущены обновления, может зависеть от природы драйвера принтера (что означает, что разные модели принтеров могут быть симптомом этой более глубокой проблемы).