BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла jsonC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла json

Сообщение Anonymous »

Я пытаюсь сравнить производительность библиотеки, которую я написал, которая может анализировать большие файлы JSON как в объектно -модель, так и в JSondocument . Насколько я могу сказать, я все делаю правильно, но я не могу выяснить, почему BenchmarkDotnet, кажется, думает, что у меня есть утечка памяти. Длина линий достигает около 2 млн персонажей - поэтому они могут быть большими, но большинство не так долго. Фактический файл составляет 3,7 МБ, из которых две записи составляют около половины этого, а оставшиеся 98 составляют другую половину.

Код: Выделить всё

[Benchmark]
public long IterateSystemsByModel()
{
long count = 0;

IGalaxyParser parser = new GalaxyParser();
foreach (StarSystem system in parser.ParseToModel(inputFilename))
{
count++;
}

return count;
}
и код для parser.parsetomodel () :

Код: Выделить всё

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();
}
}
и, наконец, код to linereader.readnextline () :

Код: Выделить всё

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
это Poco. В нем есть несколько коллекций, которые по умолчанию в пустой список или словарь, но ноль статические переменные и нулевая логика.) В файле 500 ГБ этот код анализирует примерно за 3 минуты, не пройдя около 500 МБ в памяти. Runtime = .net 8.0.19 (8.0.1925.36514), x64 ryujit avx2 //
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла json
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла json
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла json
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • BenchmarkDotnet: OutofmemoryException при сравнительном анализе файла json
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • ML.Net: System.OutOfMemoryException: «Выброшено исключение типа System.OutOfMemoryException». на небольшом наборе данных
    Гость » » в форуме C#
    0 Ответы
    54 Просмотры
    Последнее сообщение Гость

Вернуться в «C#»