Код: Выделить всё
[Benchmark]
public long IterateSystemsByModel()
{
long count = 0;
IGalaxyParser parser = new GalaxyParser();
foreach (StarSystem system in parser.ParseToModel(inputFilename))
{
count++;
}
return count;
}
Код: Выделить всё
public IEnumerable ParseToModel(string filename)
{
using (FileStream fs = File.OpenRead(filename))
{
using (StreamReader reader = new(fs))
{
while (!reader.EndOfStream)
{
var line = LineReader.GetNextLine(reader);
if (line[0] == '{') // Valid object
{
yield return JsonSerializer.Deserialize(line, serializerOptions) ??
throw new InvalidOperationException($"Line is not a valid star system.\nLine: {line}");
}
}
reader.Close();
}
fs.Close();
}
}
Код: Выделить всё
public static string GetNextLine(StreamReader reader)
{
// This method combines Trim() plus Substring() (stripping off the trailing comma),
// making it significantly faster than trying to do it in two or three calls. Also,
// It uses about a quarter the memory.
// Go to the first non-whitespace character
while (char.IsWhiteSpace((char)reader.Peek()))
{
reader.Read();
}
// Read the rest of the line
List chars = [];
var c = (char)reader.Read();
while (c != '\n')
{
chars.Add(c);
c = (char)reader.Read();
}
// Trim
var pos = chars.Count - 1;
while (char.IsWhiteSpace(chars[pos]))
{
chars.RemoveAt(pos--);
}
// Strip trailing comma, or else JsonDocument.Parse will choke on it
if (chars[^1] == ',')
{
chars = chars[..^1];
}
return new string([.. chars]);
}
< /code>
(StarSystem
gc = одновременная рабочая станция //
hardwareintrinsics = avx2, aes, bmi1, bmi2, fma, lzcnt, pclmul, popcnt, avxvni, selializ /> Vectorsize = 256 // задание: defaultjob < /p>
Overhadingjitting 1: 1 OP, 313300,00 нс, 313,3000 US /OP < /p>
< /blockquote>
Тогда он сидит там, когда я смотрел в целеустремленном виде, когда я смотрел, что я смотрю в целеустремленную память, которая была в целом, когда я смотрю, когда я смотрю, когда я смотрю, я смотрю на за исключением памяти, когда я смотрю на обороту, когда я смотрю на за исключением памяти, когда я смотрю на за исключением памяти, когда я смотрю на за исключением памяти, когда я смотрю на обороту. комната, которую можно поесть), и умирает. На этом этапе единственное, о чем я могу придумать, это либо a.) Что -то внутреннее для .net, либо b.) Тот факт, что Linereader является статичным.
В этом отношении я использую неправильный инструмент для работы? Учитывая, что это библиотека на основе ввода-вывода, должно ли я вместо этого развернуть свои более простые числа производительности здесь? (т.е. напишите тест, который запускает метод 10000 раз, выбрасывает самый большой и наименьший выброс, а остальные в среднем)? Или есть лучшая библиотека для чего -то подобного?
Подробнее здесь: https://stackoverflow.com/questions/797 ... -json-file