using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
namespace del_dublicate_mails
private static Random random = new Random();
private static Stopwatch stopwatch = new Stopwatch();
private static int generateNamesCount = 200000;
private static int threads = 150;
static void Main(string[] args)
static async void filterMailsSync()
var names = new List<string>(File.ReadAllLines("name1.txt"));
var mails = new List<string>(File.ReadAllLines("mail1.txt"));
var output = new List<string>();
Console.WriteLine("Количество имён: " + names.Count);
Console.WriteLine("Количество mail: " + mails.Count);
names = names.Distinct().ToList();
mails = mails.Distinct().ToList();
Console.WriteLine("Количество имён после очистки: " + names.Count);
Console.WriteLine("Количество mail после очистки: " + mails.Count);
var onlymail_names = new List<string>();
for (int i = 0; i < mails.Count; i++)
int index = mails[i].LastIndexOf(' ');
string s = mails[i].Substring(0, index);
for (int i = 0; i < names.Count; i++)
Console.WriteLine("Пройдено output: " + i);
for (int j = 0; j < mails.Count; j ++)
if (onlymail_names[j] == names[i])
output = output.Distinct().ToList();
Console.WriteLine("Результат output: " + output.Count);
File.Delete("output.txt");
File.AppendAllLines("output.txt", output);
Console.WriteLine("filterMails time: " + stopwatch.ElapsedMilliseconds);
static async void filterMails()
var names = new List<string>(File.ReadAllLines("name1.txt"));
var mails = new List<string>(File.ReadAllLines("mail1.txt"));
var output = new List<string>();
Console.WriteLine("Количество имён: " + names.Count);
Console.WriteLine("Количество mail: " + mails.Count);
names = names.Distinct().ToList();
mails = mails.Distinct().ToList();
Console.WriteLine("Количество имён после очистки: " + names.Count);
Console.WriteLine("Количество mail после очистки: " + mails.Count);
var onlymail_names = new List<string>();
for (int i = 0; i < mails.Count; i++)
int index = mails[i].LastIndexOf(' ');
string s = mails[i].Substring(0, index);
int unit = mails.Count / threads;
List<Task> tasks = new List<Task>();
for (int i = 0; i < names.Count; i++)
Console.WriteLine("Пройдено names: " + i);
Console.WriteLine("tasks Part time: " + stopwatch.ElapsedMilliseconds);
for (int j = 0; j < mails.Count; j += unit)
var task = Task.Run(() =>
for (int k = jj; k < jj + unit; k++)
if (onlymail_names[k] == names[ii])
Task.WaitAll(tasks.ToArray());
output = output.Distinct().ToList();
Console.WriteLine("Результат output: " + output.Count);
File.Delete("output.txt");
File.AppendAllLines("output.txt", output);
Console.WriteLine("filterMails time: " + stopwatch.ElapsedMilliseconds);
static void generateMails()
List<string> list = new List<string>();
StreamReader sr = new StreamReader("name1.txt");
StreamWriter sw = new StreamWriter("mail1.txt");
while ((line = sr.ReadLine()) != null)
line += " " + RandomString(5) + "@mail.ru";
Console.WriteLine("generateMails time: " + stopwatch.ElapsedMilliseconds);
static void generateNames()
List<string> list = new List<string>();
StreamWriter sw = new StreamWriter("name1.txt");
int k = generateNamesCount;
sw.WriteLine(RandomString(5));
Console.WriteLine("generateNames time: " + stopwatch.ElapsedMilliseconds);
public static string RandomString(int length)
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[random.Next(s.Length)]).ToArray());