Как проверить объем памяти HtmlDocument, созданного с помощью HtmlAgilityPack, или любого другого документа? - PullRequest
0 голосов
/ 25 февраля 2020

В моем приложении я пытаюсь вычислить, сколько HtmlAgilityPack создает поток памяти данных при загрузке документов.

Например, если я загружаю HtmlDocument в свою память, как проверить, какой размер одного документа, при выполнении кода ниже? Как я полагаю, он будет соответствовать размеру потока памяти, созданного для http-запроса -> result, я прав?

HtmlDocument doc = await web.LoadFromWebAsync("https://www.somefancywebsite.com/");

Каков размер памяти объекта doc?

Мне не удалось найти подобные топи c на SO, и я извиняюсь, если это что-то очевидное. Я подозреваю, что я должен был преобразовать документ в какой-то другой формат, где легко я мог бы проверить объем его памяти? Должно ли это делать работу правильно? Или я должен взять это ToArray? Или подобный подход?

int memorySize = doc.ToString().Legth //size in bytes??

РЕДАКТИРОВАТЬ: в этой статье Я обнаружил, что каждая строка занимает 20+(n/2)*4 байтов, где n это количество символов , Может быть, используя эту формулу?

РЕДАКТИРОВАТЬ: , поскольку это управляемый объект, я пробовал решения из здесь и здесь . К сожалению, я получаю исключение для doc объекта:

System.Runtime.Serialization.SerializationException: введите 'HtmlAgilityPack.HtmlDocument' в сборке 'HtmlAgilityPack (...)

РЕДАКТИРОВАТЬ: на основе этого решения, я пытаюсь преобразовать doc.ToString(), так как это в основном текстовый документ, который дает мне своего рода результат, но я не полностью удовлетворен с этим. Мне просто интересно, насколько я могу положиться на это решение и есть ли какие-либо альтернативы.

1 Ответ

0 голосов
/ 27 февраля 2020

Использование класса TestSize<T> из этого github и вызов его метода определения размера рассматривались как безопасный метод согласно этому post . Этот метод работает для большинства типов. Тем не менее, при попытке найти байты строки мне было бы лучше использовать

System.Text.ASCIIEncoding.Unicode.GetByteCount(myString);

. Следует отметить, что архитектура (32-битная / 64-битная), а также версия C# может использовать разные объемы памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...