Недолгие объекты

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

(:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)

Когда данный параметр выглядит как начинается с 'CN', выбираются все записи. где terminalid начинается с 'CN'. Иначе он выбирает записи, где terminalid равно параметру.

Запрос:

SELECT 
    sm.terminalid as terminalcode,
    sm.sums as Latest_sums
FROM sums1 sm
WHERE 
    (:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
    OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)
10
задан Tony the Pony 10 March 2009 в 19:33
поделиться

6 ответов

Не много - сборщик "мусора" очень быстр для gen0. Это также настраивает себя, корректируя размер gen0 в зависимости от того, сколько этому удается собрать каждый раз, когда это идет. (Если этим будут управлять для сбора много, то это уменьшит размер gen0 для сбора ранее в следующий раз, и наоборот.)

Окончательный тест - то, как Ваше приложение работает все же. Perfmon очень удобен здесь, показывая, сколько времени было проведено в GC, сколько наборов, там имели каждое поколение и т.д.

13
ответ дан 3 December 2019 в 19:35
поделиться

В целом это не что-то, о чем Вы должны, вероятно, волноваться и кажетесь, что это начинает падать очень близко к "микрооптимизации". GC был разработан с предположением, что "хорошо настроенное приложение" будет иметь весь, его - выделения в Gen0 - подразумевать, что они все "умирают молодые". Любое время Вы выделяете новый объект, это всегда находится в Gen0. Набор не произойдет, пока порог Gen0 не будет передан и нет достаточного количества свободного места в Gen0 для содержания следующего выделения.

"Новая" операция является на самом деле набором вещей:

  1. выделение памяти
  2. выполнение конструктора типов
  3. возврат указателя на память
  4. постепенное увеличение следующего объектного указателя
2
ответ дан 3 December 2019 в 19:35
поделиться

Поскольку Вы говорите, что само выделение очень недорого. Стоимость генерации большого количества недолгих объектов является более частыми сборками "мусора", поскольку они инициированы, когда бюджет поколения 0 исчерпывается. Однако набор поколения 0 является довольно дешевым, поэтому, пока Ваш объект действительно является недолгим, издержки наиболее вероятны не значительные.

С другой стороны, типичный пример конкатенации большого количества строк в цикле значительно продвигает сборщик "мусора", таким образом, все это зависит от количества объектов, Вы создаете. Не повреждает думать о выделении.

Стоимость сборки "мусора" - то, что управляемые потоки приостановлены во время уплотнения.

4
ответ дан 3 December 2019 в 19:35
поделиться

Хотя новая операция разработана и записана эффективно, это не свободно и действительно занимает время для выделения новой памяти. Библиотека выделения памяти должна отследить, какие блоки доступны для выделения, и недавно выделенная память обнуляется.

Создание большого количества объектов, которые умирают молодые, также инициирует сборку "мусора" чаще, и та операция может быть дорогой. Особенно с "остановкой мировые" сборщики "мусора".

Вот статья из MSDN о том, как это работает: http://msdn.microsoft.com/en-us/magazine/bb985011.aspx

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

1
ответ дан 3 December 2019 в 19:35
поделиться

Если эти объекты никогда не будут продвигаться из Поколения 0 затем, то Вы будете видеть довольно хорошую производительность. Единственные скрытые затраты, которые я вижу, - то, что при превышении бюджета Поколения 0, Вы вынудите GC уплотнить "кучу", но GC самонастроится так, это не большая часть беспокойства.

0
ответ дан 3 December 2019 в 19:35
поделиться

Сборка "мусора" поколений в .NET. Недолгие объекты будут собираться сначала и часто. Генерал 0 наборов являются дешевыми, но в зависимости от масштаба количества объектов Вы создаете, это могло быть довольно дорогостоящим. Я выполнил профилировщика, чтобы узнать, влияет ли это на производительность. Если это, рассмотрите переключение их к структурам. Они не должны быть собраны.

0
ответ дан 3 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

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