Если это не прекратится new массив, может привести к GC давление, поэтому в aspnetcore 中推荐Использование массива пула В этой статье будет рассказано, как повторно использовать массивы. использовать ArrayPool。
ArrayPool — это статический класс, предоставляющий общий пул массивов, который можно использовать для повторного использования массивов. Его можно использовать, чтобы избежать частого выделения и повторного использования массивов, тем самым снижая нагрузку на сборщик мусора.
ArrayPool Использование очень простое, просто вызовите его статический метод. Rent
Вот и все。Rent
Метод имеет два параметра: первый параметр — это длина массива, а второй параметр — минимальная длина массива. Если вы не знаете минимальную длину массива, вы можете передать значение по умолчанию, например 16. Ниже приведено использование массива пула из C# Пример:
using System;
using System.Buffers;
class Program
{
static void Main(string[] args)
{
// Создать пул массивов
var pool = ArrayPool<int>.Shared;
// Получите длину из бассейна 10 измассив
int[] array = pool.Rent(10);
try
{
// Заполните массив некоторыми данными
for (int i = 0; i < array.Length; i++)
{
array[i] = i;
}
// использоватьизданные в массиве
foreach (int i in array)
{
Console.WriteLine(i);
}
}
finally
{
// Вернуть массив в пул
pool.Return(array);
}
}
}
В приведенном выше примере мы сначала вызываем ArrayPool<int>.Shared Чтобы получить пул массивов из экземпляра. Далее мы делаем это, вызывая pool.Rent(10) Метод получает длину 10 из целочисленного массива. После заполнения массива данными мы перебираем массив и выводим его элементы. Наконец, мы делаем это, вызывая pool.Return(array) Метод возвращает массив в пул.
Следует отметить, что из,После завершения массива,Его необходимо вернуть в бассейн.,В противном случае массив всегда будет занимать память в пуле.,Вызвать утечку памяти.
Типичный сценарий — сетевое приложение с высокой пропускной способностью.,Например, на веб-сервере или сервере очереди сообщений. Этим серверам необходимо обрабатывать большое количество сетевых запросов или сообщений.,Эти запросы или сообщения могут включать в себя выделение и освобождение больших объемов памяти. Если память необходимо выделять и освобождать во время каждого запроса или обработки сообщения,Тогда сборщик мусора столкнется со значительным давлением,Вызывает ухудшение производительности системы.
Эту ситуацию можно облегчить путем объединения памяти. так,Когда вам нужно выделить массив,доступен из бассейнаизмассиввместо выделения новыхизмассив,Тем самым уменьшая нагрузку на сбор мусора. После завершения использования,Вернуть массив в пул,Чтобы его можно было повторно использовать.
Например, HTTP Серверу может потребоваться одновременно обрабатывать несколько клиентских запросов, каждый из которых требует чтения и обработки тела запроса. В этом случае вы можете Использование массива пула объединить память,Чтобы один и тот же буфер повторялся при каждой обработке запроса. Это уменьшит накладные расходы на выделение памяти и сборку мусора.,Тем самым улучшая производительность и пропускную способность сервера.
ArrayPool — это статический класс, предоставляющий общий пул массивов, который можно использовать для повторного использования массивов. Его можно использовать, чтобы избежать частого выделения и повторного использования массивов, тем самым снижая нагрузку на сборщик мусора.
undefined
Спасибо за чтение,Если вы считаете эту статью полезной,Пожалуйста, оставьте комментарий.
добро пожаловатьсосредоточиться Автор из публичного аккаунта WeChat «Колонка новых технологий», чтобы получить больше технического контента.
Следите за общедоступной учетной записью WeChat «Колонка новых технологий».