Ce serait relativement rapide à écrire:
var myStructs =
from file in Directory.GetFiles(".", "*.*", SearchOption.TopDirectoryOnly)
select ConvertFileToStructs(File.ReadAllText(file));
Si c'est le moyen le plus rapide possible, en terme de performance? Probablement pas, mais cela ne fera pas une énorme différence. Ce qui aura un impact sur les performances, c'est l'implémentation de la désérialisation dans la fonction ConvertFileToStructs(). Mais pour y répondre, nous devons connaître le format spécifique de vos fichiers.
Il vous suffit de lire vos commentaires. Je suggère l'analyse suivante:
List<MyStruct> ConvertFileToStructs(string content, int[] mapping)
{
var records = new List<MyStruct>();
int length = content.Length();
for(int i = 0; i < length; i += 247)
records.Add(ConvertRecordToStruct(content.Substring(i,247), mapping));
return records;
}
MyStruct ConvertRecordToStruct(string record, int[] mapping)
{
MyStruct s;
s.Field1 = record.Substring(mapping[0], mapping[1]);
//set other fields
return s;
}
Ce code pourrait probablement être optimisé pour la performance, mais je ne pense pas que cela changerait les choses de façon spectaculaire, en particulier parce que les E/S sur le disque est impliqué et Substring() est assez rapide (voir http://dotnetperls.com/substring). Bien sûr, vous devrez tester cela sur votre machine.
le plus rapide en termes de temps de performance ou de développement? – Manu
Je pense que vous venez de décrire l'algorithme: parcourir tous les fichiers dans un répertoire, lire une ligne à la fois, avoir une classe dont le constructeur accepte une chaîne et extrait les données appropriées. Puisque vous voulez lire toutes les données, toute autre approche ne fera qu'ajouter un surcoût. –
le plus rapide en termes de performance, comme j'ai besoin de lire des milliers d'enregistrements par minute – Dave