Получите размер байта Списка <T>

SQL Server (запускающийся с 2000) установит счетчики производительности (просматриваемый от Performance Monitor или Perfmon).

Одна из встречных категорий (от установки SQL Server 2005 года:) - SQLServer:Databases

С одним экземпляром для каждой базы данных. Счетчики, доступные однако, не предоставляют счетчик Использования % ЦП или что-то подобное, хотя существуют некоторые счетчики скорости, которые Вы могли использовать для получения хорошей оценки ЦП. Пример был бы, если у Вас есть 2 базы данных, и измеренный уровень является 20 транзакциями/секунда на базе данных A и 80 сделками/секунда на базе данных B---тогда, Вы знали бы, что A способствует примерно 20% общего ЦП, и B способствует другим 80%.

здесь существуют некоторые дефекты, поскольку это предполагает, что вся сделанная работа является зависящей от ЦП, который, конечно, с базами данных это не. Но это было бы запуском, которому я верю.

10
задан Shalan 29 November 2009 в 22:22
поделиться

3 ответа

Я не уверен, что среда выполнения предоставляет надежный программный метод получения размера объекта, однако для вас есть несколько вариантов:

  • используйте инструмент наподобие CLR Profiler
  • используйте Marshal.SizeOf () (возвращает неуправляемый размер объекта)
  • сериализуйте ваш объект в двоичный код для приближения
6
ответ дан 3 December 2019 в 16:53
поделиться

Это действительно зависит от того, что вы имеете в виду. Вы можете предсказать, сколько байтов будет использовано самим списком, но это не то же самое, что спрогнозировать, сколько байтов может быть допущено к сборке мусора, если список станет подходящим для сбора.

Биты списка:

  • резервный массив ( T [] - ссылка на массив, к которому будет иметь доступ только список)
  • Размер (int)
  • Корень синхронизации (ссылка)
  • Номер версии (int)

Сложный бит - решить, сколько считать. Каждый из них довольно легко вычислить (особенно если вы знаете, что T является ссылочным типом, например), но хотите ли вы подсчитать объекты , на которые ссылаются в списке? Эти ссылки единственные или нет?

Вы говорите, что хотите знать "в статистических целях" - не могли бы вы уточнить? Если вы можете сказать, что вас действительно интересует (и немного больше информации о том, что в списке и могут ли быть другие ссылки на те же объекты), мы, вероятно, могли бы помочь больше.

11
ответ дан 3 December 2019 в 16:53
поделиться

Это может быть ответ, полный охоты на лошади, но я собираюсь рискнуть и сказать, что если вы проводите статистические сравнения, выполните двоичную сериализацию объект в MemoryStream , а затем посмотрите на его свойство Length как таковое:

    List<string> list = new List<string>
    {
        "This",
        "is",
        "a",
        "test"
    };

    using (Stream stream = new MemoryStream())
    {
        IFormatter formatter = new BinaryFormatter();

        formatter.Serialize(stream, list);
        Console.WriteLine(stream.Length);
    }

Обратите внимание, что это может измениться между разными версиями платформы и будет полезно только для сравнения между объектами графики в одной программе.

7
ответ дан 3 December 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: