Это хорошая идея минимизировать работу сборщика мусора, удалив - PullRequest
0 голосов
/ 13 февраля 2019

Предположим, у нас есть APIView, как это, которое возвращает большой набор запросов.Могу ли я минимизировать работу сборщика мусора, выполняя подобные действия?

class MyView(APIView) 
  def get_list(self, request, format=None):
    params=request.query_params
    result = MyModel.objects.all()
    serializer = MyModelSerializer(result, many=True)
    del result #deleting explicitly here
    del params #deleting explicitly here
    return Response(serializer.data, status=status.HTTP_200_OK)

Я прочитал, что вызов gc.collect() в каждом запросе не очень хорошая идея.Это хорошая идея, чтобы сборщик мусора имел меньше мусора для сбора мусора?

1 Ответ

0 голосов
/ 13 февраля 2019

Прежде всего, ваши операторы del ничего не сделают, поскольку объекты, на которые ссылаются эти переменные, имеют другие ссылки, указывающие на них.

Во-вторых, даже если это не так, оператор del удаляет переменную, но не собирает мусор данных, на которые она ссылалась.

И наконец, автоматическая сборка мусора была разработана, чтобы избавить разработчика от необходимости явно освобождать память.Переполнение вашего кода с помощью операторов сборки мусора будет а) мешать оптимальному алгоритму сборки мусора, и б) снизит читабельность кода.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...