Um dos meus projetos requer múltiplas operações de gravação em 65.536 arquivos ao mesmo tempo.
Se você abrir todos os arquivos primeiro, depois escrever repetidamente e, finalmente, fechar todos os arquivos. Em seguida, levará cerca de 16 minutos para a primeira operação de gravação ser concluída e 40 minutos para a segunda vez. Não há mais testes.
para (int i = 0; i < 65536; i++)
{
fileStream[i] = new FileStream(buffDir+"\"+ i.ToString() + ".dat", FileMode.Create,FileAccess.Write, FileShare.Write,14000);
}
escrever;
escrever;
escrever;
........
para (int i = 0; i < 65536; i++)
{
fileStream[i] .close();
}
Se apenas um arquivo correspondente for aberto durante a operação de gravação, ele será fechado após a gravação. Depois, leva apenas cerca de 2 minutos e 30 segundos para que todas as operações de gravação sejam concluídas.
ciclo{
para (int i=0;i<65536;i++)
{
abrir;
escrever;
fechar;
}
}
Percebe-se que o desempenho do segundo método é muito maior que o primeiro. Abrir todos os arquivos de uma vez requer muita memória. O mais importante é que quando o .net processa o fluxo de arquivos, pode ser necessário realizar muita alocação e reciclagem de memória, o que consome muita memória e recursos.
Além disso, também fiz um teste. Se o número de arquivos for relativamente pequeno, o desempenho do primeiro método é muito melhor que o do segundo.
http://xiyangwushi.cnblogs.com/archive/2006/06/28/437409.html