Выходными данными должен быть большой текстовый файл, где каждая строка имеет форму Number.String, текст произвольный:
347. Bus
20175. Yes Yes
15. The same
2. Hello world
178. Tree
Размер файла должен быть указан в байтах.Интересует самый быстрый способ создания файлов размером около 1000 МБ и более.
Вот мой код для генерации случайного текста:
public string[] GetRandomTextWithIndexes(int size)
{
var result = new string[size];
var sw = Stopwatch.StartNew();
var indexes = Enumerable.Range(0, size).AsParallel().OrderBy(g => GenerateRandomNumber(0, 5)).ToList();
sw.Stop();
Console.WriteLine("Queue fill: " + sw.Elapsed);
sw = Stopwatch.StartNew();
Parallel.For(0, size, i =>
{
var text = GetRandomText(GenerateRandomNumber(1, 20));
result[i] = $"{indexes[i]}. {text}";
});
sw.Stop();
Console.WriteLine("Text fill: " + sw.Elapsed);
return result;
}
public string GetRandomText(int size)
{
var builder = new StringBuilder();
for (var i = 0; i < size; i++)
{
var character = LegalCharacters[GenerateRandomNumber(0, LegalCharacters.Length)];
builder.Append(character);
}
return builder.ToString();
}
private int GenerateRandomNumber(int min, int max)
{
lock (_synlock)
{
if (_random == null)
_random = new Random();
return _random.Next(min, max);
}
}
Я не знаю, как заставить работать этот код нес размером строк, но с размером МБ.Когда я устанавливаю размер около 1000000000, я получаю OutOfMemoryException
.И, может быть, есть более быстрый способ создания индексов