Jschemavalidating Readerer - OOM при обработке больших токеновC#

Место общения программистов C#
Anonymous
Jschemavalidating Readerer - OOM при обработке больших токенов

Сообщение Anonymous »

Мы столкнулись с некоторыми проблемами с памятью при проверке JSON. 9.0.304 < /li>
< /ul>
Для проверки у нас есть код, подобный этим: < /p>

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

var validationResult = new Lazy();
var streamReader = new StreamReader(stream);
var jsonReader = new JsonTextReader(streamReader);
var validatingReader = new JSchemaValidatingReader(jsonReader);
validatingReader.Schema = schema;

validatingReader.ValidationEventHandler += (o, a) =>
{
// simplified error handling...
Console.WriteLine(a.Message)
};

while (await validatingReader.ReadAsync(cancellationToken)){
// force reader throuth stream...
}
< /code>
Допустим, у нас есть схема, как это: < /p>
{
"type": "object",
"additionalProperties": false,
"required": [
"demoId",
],
"properties": {
"demoId": {
"type": "string",
"maxLength": 50
}
}
}
< /code>
И мы отправляем несколько непропорциональных JSON в проверку: < /p>
{
"demoId": "... Some very large string token - lets say 10M chars ..."
}
Когда я отлаживал эту ситуацию, когда запускается событие valyationEventhandler , сообщение об ошибке содержит целые 10м Chars.
Также в соответствии с DotMemory значение, кажется, находится в памяти, как 4 раза.
, что является чем -то вроде 10M Chars * 2b * 4 приспособления ~ = 80m. /> Существует ли какой -нибудь способ справиться с этим без написания пользовательского jsontextreader или какой -то пользовательской проверки для экстремальных длинов токенов в подтвержденном json?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... rge-tokens

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