Pergunta

A abertura de um FileChooserDialog GTK é dolorosamente lenta para os diretórios NFS que contêm muitos arquivos. Strace mostra muito tempo chamando "Stat". Cerca de 5 chamadas para cada um dos arquivos no diretório. Como podemos desligar as chamadas para 'Stat' e apenas mostrar uma lista de nomes de arquivos sem o tempo de modificação?

Estamos usando o Redhat Enterprise 4, x86_64, Linux 2.6.9-42.0.8.elsmp e o FileChooser vêm de: /usr/lib64/libgtk-x11-2.0.so.0.400.13. Um programa de teste abre um FileChooserDialog e leva 10 segundos para aparecer, em comparação com cerca de 25 ms para 'LS' para listar o mesmo diretório.

Nosso aplicativo Eclipse sendo aleijado por esse problema de seletor de arquivos ...

Foi útil?

Solução

A equipe GTK+ e Gnome têm um incomodar Relatório relacionado a esse problema, pelo menos desde 2005. Alterações recentes e futuras nas bibliotecas GNOME Core melhorarão o desempenho. Esse problema pode ser agravado se você tiver algum favorito para unidades de rede no menu FileChooser.

Outras dicas

A caixa de diálogo aberta do arquivo GTK é provavelmente estatal (2) todos os arquivos no diretório. É um equivalente de ls -l no diretório, e deve correr sobre isso lentamente. A saída de ls | cat (que é significativamente mais rápido) pode não ser suficiente, porque esse não é possível distinguir arquivos dos diretórios.

Eu sugiro medir ls | cat, ls -l e e a caixa de diálogo Abrir arquivo GTK. Se a caixa de diálogo aberta do arquivo GTK for muito mais lenta do que ls -l, depois há algo errado com o GTK (não o NFS). Eu executaria o aplicativo GTK por meio strace, e veja o que é lento. Se a caixa de diálogo aberta do arquivo GTK tiver aproximadamente a mesma velocidade que ls -l, Acho que não pode ser tornado mais rápido - talvez os sinalizadores de montagem do NFS possam ser aprimorados, clientes e servidores da NFS atualizados ou é possível mudar para uma infraestrutura mais rápida, como o Samba.

Is the directory mounted noatime? That may help with the stat since the atime for each file will be updated with the stat.

You'll need to remount the nfs mount with -o noatime in order to turn off atime updating.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top