Exceção de processo lenta devido a consultas desnecessárias de dll

0

Estou tendo problemas de desempenho com um programa pequeno que às vezes é iniciado com muita freqüência em uma máquina. É um programa de 32 bits sendo executado em uma máquina de 64 bits. É chamado im_comp.exe e é normalmente colocado e executado a partir de:

C:\Program Files (x86)\TESLA\bin

Agora, se eu executar este programa 150 vezes a partir deste local, levará 15 segundos, mas se eu copiar a pasta bin para a área de trabalho e executá-la, levará apenas 10 segundos (é ~ 30% mais rápida toda vez, sem exceções). Eu imaginei que isso poderia ter algo a ver com o local onde o processo carrega suas dlls, então limpei o caminho de qualquer coisa relacionada à TESLA e isso não importa. Então eu corri o monitor de processo em uma única execução e encontrei uma diferença clara. No log de quando o programa foi executado em C: \ Arquivos de Programas (x86) \ TESLA \ bin, há muitas entradas seguindo este padrão:

CreateFile  C:\Program Files (x86)\TESLA\bin\im_comp.exe.Local\wow64.dll PATH NOT FOUND Desired Access: ...
CreateFile  C:\Program Files (x86)\TESLA\bin\wow64.dll NAME NOT FOUND Desired Access: ...
CreateFile  C:\Windows\System32\wow64.dll SUCCESS Desired Access: ...

Essas entradas estão completamente ausentes no log quando eu executo na área de trabalho.

Agora, há arquivos .Local na pasta bin da área de trabalho e na outra. Mesmo se eu remover todos os arquivos .Local das pastas, ainda recebo os mesmos padrões de log.

Por que o processo tenta acessar arquivos dll no diretório local, mesmo que não existam arquivos .Local? Este é um problema baseado no próprio programa ou no ambiente? Existe alguma maneira de desligá-lo, de preferência sem movê-lo, pois faz parte de uma aplicação maior.

    
por erik 24.05.2012 / 16:13

1 resposta

1

Isso é por design, eu acredito.

A Microsoft permite aos desenvolvedores redistribuir componentes / .dll que vêm com o Visual Studio, como tempos de execução relacionados ao Visual Basic, etc. Portanto, não tem sido atípico para muitos programas do Windows terem versões específicas de .dll das quais dependem. diretórios de aplicativos e ter a necessidade de usar essa versão em uma versão posterior que possa estar instalada no sistema.

Eu tenho um palpite de que, durante a instalação, o Windows pode mapear nomes de arquivos de programa para locais conhecidos de .dll (isso pode até fazer parte do serviço "Superfetch") e, portanto, não procurá-los ou pré-carregá-los. Aposto que algo assim está acontecendo. Não sei como desativá-lo, no entanto.

    
por 24.05.2012 / 16:47