Question

Quelle est la plus rapide à ce qui suit en C # 3.5:

  1. itérer les fichiers dans un répertoire
  2. Lire les enregistrements du fichier (longueur fixe de 247 caractères)
  3. Convertir la chaîne de longueur fixe de chaque enregistrement à une structure ou classe.

Merci

Était-ce utile?

La solution

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 il ne fera pas une énorme différence. Ce qui aura un impact sur les performances est la mise en œuvre de la désérialisation au sein de la fonction ConvertFileToStructs (). Mais pour répondre à cela, nous avons besoin de connaître le format spécifique de vos fichiers.


Il 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 le tester sur votre machine.

Autres conseils

classe personnalisée pour gérer les fichiers

   class customFile
        {
            string fileText;
            public string FileText
            {
                get { return fileText; }
                set { fileText = value; }
            }
        }

lire tout le texte

        string[] filePaths = Directory.GetFiles(dirPath);
        List<customFile> customFiles = new List<customFile>();
        foreach (string file in filePaths)
        {
            customFiles.Add(new customFile { FileText = File.ReadAllText(file) });
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top