Наша игровая программа инициализирует данные всех игроков в память. Моя цель - уменьшить память, которая не нужна. Я проследил программу и обнаружил, что «для» занимает много памяти.Как я могу освободить память, вызванную «за»
Например:
Line # Mem usage Increment Line Contents
================================================
52 @profile
53 11.691 MB 0.000 MB def test():
54 19.336 MB 7.645 MB a = ["1"] * (10 ** 6)
55 19.359 MB 0.023 MB print recipe.total_size(a, verbose=False)
56 82.016 MB 62.656 MB for i in a:
57 pass
печати recipe.total_size (а, многословен = False): 8000098 байт
Вопрос заключается в том, как я могу выпустить что 62.656 Мб памяти.
P.S.
К сожалению, я знаю, что мой английский не очень well.I по достоинству оценят все, чтобы прочитать это :-)
Я боюсь, что ваш анализ здесь неверен. Все 'for' does - это создать объект-итератор для' a', который является не чем иным, как ссылкой на 'a' и значением индекса для отслеживания того, где находится список, в котором находится итератор. ** Нет ничего более **. –
Какой инструмент я использовал memory_profiler.Хотя я не совсем понимаю его, он приветствуется в github. (Https://github.com/fabianp/memory_profiler) Если «for» больше не делал, где фигура (62.656 МБ)? – wangbuze
Я предполагаю, что здесь должен быть виноват список 'a'; на моем 64-битном Mac список с 1 миллионом строк занимает около 44 МБ памяти; 7MB, как сообщается, недостаточно даже для 32-битной системы. Я вычислил этот размер с помощью функции 'sys.getsizeof()' для измерения требований к памяти одной строки '' 1 '', умноженной на 1 миллион, плюс размер объекта списка с 1 миллионом ссылок. –