Задать вопрос
@daniil14056

Как работать с ArrayPool, Откуда утечки?

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

Вот пример класса, Почему память продолжает быть занятой, При том Гигабайты памяти.
using Test<int> t=new();

  public class Test<T> : IDisposable
  {
      internal T[] cache;
      int len;
      int size; 
 
    private static ArrayPool<T> pool;
      static Test()
      {
          //pool = ArrayPool<T>.Create(16*1024*1024, 16*4);
          pool = ArrayPool<T>.Shared;
      }
      public Test(int size = 1024 * 16)
      {
          cache = pool.Rent(size);
          len = 0;
          this.size = size;
      }

      public void Add(T t)
      {
          int newIndex = len + 1;
          if (newIndex == size)
          {
              resize(newIndex);
          }
          cache[len++] = t;
      }

      private void resize(int newLen)
      {
          size = (newLen ) * 2;
          var temp = pool.Rent(size); 
          Array.Copy(cache, temp, len);
          pool.Return(cache);
          cache = temp; 
      }

Какие есть советы и рекомендации по использованию?
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Сложный Комментировать
Решения вопроса 1
Так в этом же и суть пула: выделить много памяти один раз и переиспользовать её много раз.
Тем более что ты взял Shared пул, а не создал новый - вот он и не освобождает память
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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