У меня есть большой файл, который я читаю, и преобразовываю все несколько строк в экземпляр объекта.
Так как я перебираю файл, я помещаю экземпляр в список, используя list.append(экземпляр), а затем продолжаю цикл.
Это файл размером около 100 МБ, поэтому он не слишком большой, но по мере увеличения списка цикл циклически замедляется. (Я печатаю время для каждого круга в цикле).
Это не является неотъемлемой частью цикла ~, когда я печатаю каждый новый экземпляр при прохождении цикла через файл, программа прогрессирует с постоянной скоростью ~ это только когда я добавляю их в список, который он замедляет.
Мой друг предложил отключить сбор мусора перед циклом while и включить его позже и сделать вызов коллекции мусора.
Кто-нибудь еще наблюдал аналогичную проблему, когда list.append стал медленнее? Есть ли другой способ обойти это?
Я попробую следующие две вещи, предложенные ниже.
(1) "предварительное выделение" памяти - какой лучший способ сделать это? (2) Попробуйте использовать deque
Несколько сообщений (см. комментарий Alex Martelli) предполагали фрагментацию памяти (у него много доступной памяти, как и я) ~, но никаких очевидных ошибок в производительности для этого нет.
Чтобы воспроизвести это явление, запустите тестовый код, приведенный ниже в ответах, и предположите, что списки имеют полезные данные.
gc.disable() и gc.enable() помогают с синхронизацией. Я также буду тщательно анализировать, где все время тратится.