C# Самый эффективный способ чтения содержимого файла, замены некоторого содержимого и, наконец, загрузки его как XDocument. - PullRequest
0 голосов
/ 21 февраля 2020

Я хотел бы прочитать содержимое файла и сделать некоторые замены на нем. После этого исходный файл с заменами загружается как XDocument. Я сделал 2 разных реализации:

реализация1:

string contents1 = File.ReadAllText(fileInfo.FullName, new UTF8Encoding(true));

File.WriteAllText(fileInfo.FullName, methodForReplacements(contents1), new UTF8Encoding(true));

return XDocument.Load(fileInfo.FullName, LoadOptions.PreserveWhitespace);

реализация2:

string contents;

using (FileStream fs = File.OpenRead(fileInfo.FullName))
{
    using (StreamReader sr = new StreamReader(fs, new UTF8Encoding(true)))
    {
        contents = methodForReplacements(sr.ReadToEnd());
    }
}

using (StreamWriter sw = new StreamWriter(fileInfo.Name, false, new UTF8Encoding(true)))
{
    sw.Write(contents);
}
return XDocument.Load(fileInfo.FullName, LoadOptions.PreserveWhitespace);

replaceMethod ():

private string methodForReplacements(string contents)
{
    string replaced = new StringBuilder(contents)
        .Replace("\r", "
")
        .Replace("\n", "
")
        .ToString();

    return replaced;
}

После после некоторого бенчмаркинга (10000 итераций, размер файла: 265 КБ, numberOfReplacements: 10) кажется, что выполнение 2 реализаций занимает очень много времени (реализация 1: 99se c, реализация 2: 97se c). Есть ли другой, более оптимизированный и эффективный способ достижения того же результата?

1 Ответ

0 голосов
/ 21 февраля 2020

Это похоже на процесс из трех задач. так что до тех пор, пока вам не нужно читать вперед, чтобы знать, что нужно инертировать в XDocument, вы можете делать, читая в каждой строке входного файла, искать символы, которые необходимо заменить, и затем писать из строки ввода с изменениями. Я полагаю, что между строкой ввода и измененным содержимым у вас достаточно информации и содержимого, чтобы решить, что нужно go для XDocument, чтобы ответить соответствующим образом. Это сэкономит вам время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...