L'un de mes propres projets nécessite plusieurs opérations d'écriture sur 65 536 fichiers en même temps.
Si vous ouvrez d'abord tous les fichiers, puis écrivez à plusieurs reprises et enfin fermez tous les fichiers. Ensuite, il faudra environ 16 minutes pour que la première opération d'écriture soit terminée et 40 minutes pour la deuxième fois. Aucun autre test.
pour (int i = 0; i < 65536; i++)
{
fileStream[i] = new FileStream(buffDir+"\"+ i.ToString() + ".dat", FileMode.Create,FileAccess.Write, FileShare.Write,14000);
}
écrire;
écrire;
écrire;
........
pour (int i = 0; i < 65536; i++)
{
fileStream[i] .close();
}
Si un seul fichier correspondant est ouvert lors de l'opération d'écriture, il sera fermé après l'écriture. Ensuite, il ne faut que 2 minutes et 30 secondes environ pour que toutes les opérations d'écriture soient terminées.
faire du vélo{
pour (int i=0;i<65536;i++)
{
ouvrir;
écrire;
fermer;
}
}
On constate que les performances de la deuxième méthode sont bien supérieures à celles de la première. L'ouverture de tous les fichiers en même temps nécessite beaucoup de mémoire. Le plus important est que lorsque .net traite le flux de fichiers, il peut devoir effectuer beaucoup d'allocation et de recyclage de mémoire, ce qui consomme beaucoup de mémoire et de ressources.
De plus, j'ai également fait un test. Si le nombre de fichiers est relativement faible, alors les performances de la première méthode sont bien meilleures que celles de la seconde.
http://xiyangwushi.cnblogs.com/archive/2006/06/28/437409.html