Сравниваю 1 и 2 текстовый файл, если в 1 нету тех строк, которые во 2 текстовом файле, то он создает третий текстовый файл и записывает в него. Как ускорить весь процесс, так как это очень долго, занимает очень много оперативной памяти при работе, объем текстовых файлов размером более 1 гб, сейчас работает такой код:
var file1 = File.ReadLines("file1.txt");
var file2 = File.ReadLines("file2.txt");
File.WriteAllLines("Result.txt", file2.Except(file1));
Аналоги которую сортируют ПО так же, занимают при сравнении на много меньше ресурсов и работают шустрее.
Вот как ваш код может примерно выглядеть:
var set = new HashSet<string>();
foreach(var line in File.ReadAllLines("file1.txt")) set.Add(line);
// размеры буфера установите сами как вам надо, я для пример указал 10 мб
using(var sw = new StreamWriter(new BufferedStream(File.OpenWrite("Result.txt"), 10*1024*1024 )))
{
using(var sr = new StreamReader(new BufferedStream(File.OpenRead("file2.txt"), 10*1024*1024)))
{
while(!sr.EndOfStream)
{
var line = sr.ReadLine();
if (!set.Contains(line)) sw.WriteLine(line);
}
}
}
UPD
Если предположить, что изначальные файлы сортированы и не содержат дублткатов, то задача становится абсолютно другой и не требует большого потребления памяти - достаточно считывать файлы по строке. Я только добавил буферы на чтение и запись, то есть в итоге програма должна отъедать немного памяти.
Корректность проверяйте сами.
var f1 = @"D:\temp\1071344\file1.txt";
var f2 = @"D:\temp\1071344\file2.txt";
var ret = @"D:\temp\1071344\Result.txt";
using (var sr1 = new StreamReader(new BufferedStream(File.OpenRead(f1), 10 * 1024 * 1024)))
{
using (var sr2 = new StreamReader(new BufferedStream(File.OpenRead(f2), 10 * 1024 * 1024)))
{
using (var sw = new StreamWriter(new BufferedStream(File.Open(ret, FileMode.Create), 10 * 1024 * 1024)))
{
if (sr2.EndOfStream) return;
if (sr1.EndOfStream)
{
while (!sr2.EndOfStream) sw.WriteLine(sr2.ReadLine());
return;
}
var l1 = sr1.ReadLine();
var l2 = sr2.ReadLine();
while (!sr1.EndOfStream || !sr2.EndOfStream)
{
if (sr1.EndOfStream)
{
while (!sr2.EndOfStream) sw.WriteLine(sr2.ReadLine());
return;
}
if (sr2.EndOfStream) return;
var comp = string.Compare(l1, l2);
if (comp < 0) l1 = sr1.ReadLine();
if (comp == 0)
{
l1 = sr1.ReadLine();
l2 = sr2.ReadLine();
}
if (comp > 0)
{
sw.WriteLine(l2);
l2 = sr2.ReadLine();
}
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня на сайте есть галерея картинокКартинки в довольно хорошем качестве, где-то 2000х1500
Есть сайт, когда ссылку на страницу сайта кидаю, например, в skype, то с сайта подтягивается картинка, тайтл и описание, которые находятся в мета-тегах...
Как можно сделать так, что бы при отправлении ссылки на мой сайт в Telegram отображался предпросмотр открываемой страницы? Не Instant View, а что бы просто...
Друзья! Столкнулся с проблемой при вёрстке страницыДело в том, что снизу появляется слайдер, которого там быть не должно