#c_sharp #многопоточность
Есть класс генерации строки определенного форамата: случайная дата за последние 5 лет || случайный набор 10 латинских символов || случайный набор 10 русских символов || случайное положительное четное целочисленное число в диапазоне от 1 до 100 000 000 || случайное положительное число с 8 знаками после запятой в диапазоне от 1 до 20 Пример вывода: 03.03.2015||ZAwRbpGUiK||мДМЮаНкуКД||14152932||7,87742021|| 23.01.2015||vgHKThbgrP||ЛДКХысХшЗЦ||35085588||8,49822372|| 17.10.2017||AuTVNvaGRB||мЧепрИецрА||34259646||17,7248118|| 24.09.2014||ArIAASwOnE||ЧпЙМдШлыфУ||23252734||14,6239438|| 16.10.2017||eUkiAhUWmZ||ЗэЖЫзЯШАэШ||27831190||8,10838026|| Класс: class GenFile { public GenFile() { } private Random gen = new Random(); private DateTime RandomDay() { DateTime start = new DateTime(2013, 1, 1); int range = (DateTime.Today - start).Days; return start.AddDays(gen.Next(range)); } private string RandomString(string lang) { string data = null; const string engChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; const string rusChars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; if (lang == "eng") { data = new string(Enumerable.Repeat(engChars, 10) .Select(s => s[gen.Next(s.Length)]).ToArray()); } else if (lang == "rus") { data = new string(Enumerable.Repeat(rusChars, 10) .Select(s => s[gen.Next(s.Length)]).ToArray()); } return data; } private int RandomIntNumber() { int number; int min = 1; int max = 100000000; return number = (2 * gen.Next(min / 2, max / 2)); } private double RandomDoubleNumber() { int min = 1; int max = 20; var next = gen.NextDouble(); return min + (next * (max - min)); } public override string ToString() { return (RandomDay().ToString("d") + "||" + RandomString("eng") + "||" + RandomString("rus") + "||" + RandomIntNumber() + "||" + RandomDoubleNumber().ToString("F8") + "||"); } } При создании через цикл 100 файлов и записи в них 100 000 этот процесс затягивается. Как это делаю я (очень медленно): GenFile genFile = new GenFile(); int i = 0; while (i < 100) { int j = 0; while (j < 100000) { File.AppendAllText(i + ".txt", genFile.ToString()); File.AppendAllText(i + ".txt", "\r\n"); j++; } i++; } Подскажите, а лучше покажите, как ускорить. С потоками никогда не работал. Пока не понимаю, как через потоки реализовать. И можно ли вообще. Заранее спасибо.
Ответы
Ответ 1
StringBuilder sb = new StringBuilder(); int i = 0; while (i < 100) { sb.Clear(); int j = 0; while (j < 100000) { sb.Append(genFile.ToString()); sb.Append("\r\n"); j++; } File.AppendAllText(i + ".txt", sb.ToString()); i++; // потерял }
Комментариев нет:
Отправить комментарий