Сокращение объема памяти в долговременных приложениях

В моем приложении сотня массивов (по 1000 сложных элементов в каждом) генерируется и заполняется данными. Затем на протяжении многих итераций элементы массива модифицируются снова и снова. После первоначального создания системный монитор сообщает об использовании около 50 МБ ОЗУ. Несмотря на то, что я не генерирую никаких новых массивов, занимаемая площадь продолжает расти примерно на 40 Мб за итерацию.

Я научилсяВот, что сборщик мусора не обрабатывает массивы. Поэтому я предполагаю, что некоторые временные массивы, которые я генерирую для манипулирования данными, собраны неправильно.

Вот он говорит, что guppy.hpy (). heap () не помогает с профилированием numpy, к сожалению.

Как я могу определить источник проблемы и в идеале сохранить потребление постоянным в течение любого количества итераций?

Я подозреваю, что я могу генерировать копии при назначении элементов массива, как описаноВот, которые потом не собирают мусор.

Могу ли я вручную утилизировать временные массивы для сбора мусора?

[Обновление 1]: пример кода

Этот бит кода вызывается тысячи раз. Каждый раз, след увеличивается. Я не понимаю почему, потому что, насколько я понимаю, это только чтение существующих массивов и манипулирование другими существующими массивами. Делает ли какая-либо из этих операций нарезки что-то непреднамеренное? (Извините за длину строки. Я могу упростить ее, но тогда я тоже могу скрывать свои ошибки.)

for ts in np.arange(numTimeslots):
            for fc in np.arange(numFreqChunks):
                interfencep = np.sum( np.dot(np.dot(self.baseStations[bs].cells[cell].CSI_OFDMA[:,:,fc,ts] ,np.diag(cell.OFDMA_power[:,fc,ts])),self.baseStations[bs].cells[cell].CSI_OFDMA[:,:,fc,ts].conj().T) for bs in self.baseStations for cell in bs.cells if cell != self._cell) 
                noisep = np.eye(self.antennas) * (self.noisePower / numFreqChunks)
                self.OFDMA_interferenceCovar[:,:,fc,ts] = noisep + interfencep
                self.OFDMA_EC[:,:,fc,ts] = (np.dot(np.dot(self.OFDMA_CSI[:,:,fc,ts],linalg.inv(noisep+interfencep)),self.OFDMA_CSI[:,:,fc,ts].conj().T))
                eigs = linalg.eig(self.OFDMA_EC[:,:,fc,ts])[0]
                self.OFDMA_SINR[:,fc,ts] = np.real(eigs)

[Обновление 2]: Для тех, кому интересно, это часть симулятора мобильной сети. Работает на virtualenv, Python 2.7.3, Numpy 1.6.2, SciPy 0.11.0b1

[Обновление 3]: комментируя его и проверяя системный монитор, я могу определить, что линия-интерференции = виновата. Он выделил значительную память, которая не освобождается. Но почему?

Ответы на вопрос(2)

Ваш ответ на вопрос