Pergunta

Muitos editores hexadecimais, como Hex Workshop, pode mesmo ler arquivos de grande porte, mantendo uma parte relativamente pequena pegada de memória, mas ainda conseguem manter a rolagem suave. Eu estou procurando a melhor maneira de conseguir isso, e então eu tenho várias perguntas relacionadas.
Devo apenas usar FileStream
- é o seu buffer baseado na corrente Procure localização? (Será que vai normalmente pagefault ao rolar para trás?)
- Se eu criar um wrapper para FileStream que utiliza apenas buscar internamente, vou machucar a capacidade de FileStream para o buffer corretamente? (Ou seja, o desempenho vai sofrer muito de busca repetida, mesmo que procura estão nas proximidades? Posso contar com o algoritmo de buffer ou o agendador de disco para manter o desempenho acima?)
Seria melhor usar mapeados na memória I / O? (Eu só realmente esperar arquivos de até 100MB talvez)
- PageFaults faria a partir de pesquisa / jumping / fast scrolling criar problemas de desempenho perceptível
? Em última análise, os dados têm de ser exibido. Devo processar o arquivo inteiro como um mapa de bits e peças Invalidate da imagem sobre mudanças (deixando o controle de rolagem fazer sua própria paginação na imagem), ou devo apenas gerar a área de exibição atual em eventos de rolagem?
Assim, em breve, fazer página I Dados, a imagem gerada, ou ambos, ou que eu recebo / gerá-los, conforme necessário? O que o (WPF / .Net) bibliotecas / API objetos mais adequados para esta tarefa?

Foi útil?

Solução

Você parece já ter a resposta.
A solução geral para este está usando Memória arquivos mapeados e deixar o OS se preocupar com caching e buscando.
Primeiro tente a solução mais simples e mais óbvia. Se ele não funciona para a sua satisfação, otimizar os gargalos. otimizações prematura é a raiz de todo o mal.

Outras dicas

100MB realmente não é tão grande. Assim, em memória provavelmente iria funcionar em máquinas novas.

Mas você não gostaria que sua solução para não escalar conforme o tempo passa. O minuto que você assumir o limite é de 100MB alguém vai tentar com 200MB. Então eu recomendo que você tome a "buscar" rota -. Essa é a maneira comum de fazer isso

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