ФОН:
При запуске моего приложения через профилировщик создается впечатление, что все горячие точки участвуют в выделении большого количества временных новых массивов byte [].
За один запуск в CLR Profiler несколько коротких (3-5 секунд процессорного времени вне профилировщика) генерировали более гигабайта мусора, большая часть которого была распределена в байтах [], и это вызвало более 500 сборок.
В некоторых случаях кажется, что приложение тратит более 10% своего процессорного времени на выполнение сборов.
Ясно, что перезапись в порядке.
Итак, я подумываю о замене новых распределений в байтах [] классом пула, который может использовать буфер позднее.
Как то так ...
{
byte[] temp = Pool.AllocateBuffer(1024);
...
}
ВОПРОС:
Как заставить приложение вызывать код в подпрограмме Pool.deAllocate (temp), когда temp больше не нужен.
В приведенном выше фрагменте кода, когда temp является буфером, выделенным для пула byte [], но когда он выходит из области видимости, он удаляется. Не реальная проблема, но не используется в пуле.
Я знаю, что мог бы заменить "return 0;" с "Pool.deAllocate (temp); вернуть 0", но я пытаюсь заставить восстановление произойти.
Возможно ли это хотя бы отдаленно?