Сначала я написал код с помощью StringBuilder и ударил Out Of Memory Exception, прочитал связанные вопросы и изменил его на строку + =, но все еще получал ту же ошибку OOM.Out Of Memory on String и StringBuilder
У меня есть ~ 2100 + файлы разных размеров и всего ~ 200 МБ +.
Из-за ограничений я не могу использовать доступ к файлам в режиме присоединения. Любые санкции?
const string myPath = @"C:\values\";
var files = Directory.EnumerateFiles(myPath).Select(Path.GetFileNameWithoutExtension);
var filesGrouped = files.Where(f => f.Length > 12).GroupBy(f => f.Substring(0, f.Length - 9)).OrderBy(f => f.Key).ToList();
filesGrouped.ForEach(fg =>
{
var myRows = string.Empty;
// download files
fg.ToList().ForEach(gf =>
{
string myFile;
string fileToRead = string.Format("{0}{1}.csv", myPath, gf);
using (var sr = new StreamReader(fileToRead)) myFile = sr.ReadToEnd();
//! OOM Error hits the line below
myRows += myFile + ControlChars.NewLine;
});
// upload new file
using (var sw = new StreamWriter(myPath + fg.Key + ".csv", false, Encoding.UTF8)) sw.Write(myRows);
});
Sidenote: заменить 'ControlChars.NewLine' на' Environment.NewLine'. –