Imprimindo a partir de C # usando muitas alças

2

Eu tenho um aplicativo muito simples que está imprimindo arquivos TIFF para uma variedade de impressoras em rede. As impressoras são instaladas em três servidores de impressão diferentes, enquanto o aplicativo é executado em uma máquina separada. (Vamos chamá-los de Print1,2,3 e App1.)

Na maioria das vezes isso funciona bem, mas ultimamente tenho notado que certas novas impressoras (modelo HP P4515x usando drivers PCL6) estão causando um aumento no número de identificadores abertos pelo spoolsv.exe no App1. Um documento pode aumentar as alças em 500, e elas nunca são liberadas, o que eventualmente leva à reinicialização da máquina App1, se isso não for detectado a tempo. Nenhum dos servidores de impressão reais parece afetado por esse problema.

O código está fazendo algo muito semelhante em conceito a isso, mas a partir de um serviço em segundo plano executado em uma conta de domínio: Link do MSDN . Estou especificando a impressora usando a convenção de nomenclatura \ print3 \ deptP4515x.

[Não tenho certeza se isso acontece no StackOverflow ou no ServerFault, mas acho que, devido ao possível problema do driver, ele deve estar aqui?]

EDIT: Eu rodei o procexp e vi que o identificador de 1243 cresceu, 1135 são: Chave IO partilhada HKLM \ SOFTWARE \ Hewlett-Packard \ San Diego

    
por mpeterson 15.10.2009 / 15:42

3 respostas

3

Tente reproduzir o sintoma com outro driver, como o HP LaserJet 4 ou 4100 PCL. Use o driver interno, não um driver personalizado fornecido pelo fornecedor.

Se o sintoma ocorrer com esses drivers, provavelmente não será um problema com o driver P4515.

Execute uma descoberta na sua pasta% systemroot% \ system32 \ spool \ drivers, procurando por hpbmini.dll e hpcdmc32.dll. Versões mais antigas desses arquivos são conhecidas por causar grandes problemas na impressão.

    
por 15.10.2009 / 16:28
2

Você é o Dispose () dos seus objetos PrintDocument, é você? Esta é uma omissão frequente dos exemplos do MS .NET.

    
por 15.10.2009 / 16:38
1

Verifique o código do aplicativo. Certifique-se de que as conexões da impressora estejam criadas dentro das instruções using . Caso contrário, não é garantido que o código gerenciado os feche em tempo hábil, e a rapidez com que o release realmente pode depender da natureza do driver da impressora (o que significa que as diferentes impressoras modelo podem ser um sintoma desse problema mais profundo).

    
por 17.02.2010 / 04:54