On Fri, 04 Dec 2009 19:05:12 +0100, Pietro Battiston <too...@email.it> wrote: > Il giorno ven, 04/12/2009 alle 13.39 +0100, Daniele Varrazzo ha scritto:
>> Io infatti avrei salvato tutti i dizionari dopo un numero prefissato di >> righe lette dal file di input. In questo modo l'occupazione di memoria è >> controllata e le prestazioni credo siano in linea (qualche file potrebbe >> avere poche righe, ma se su 1000 file aperti si scrivono 1M di righe >> statisticamente siamo lì). Credo sia anche molto più semplice da >> scrivere e >> meno soggetto ad errori. >> > > A me sembrerebbe più efficiente una via di mezzo: si scrive su file ogni > volta che si è raggiunta l'occupazione massima di memoria, ma si scrive > solo il file con più righe (da scrivere). > > Significa semplicemente ogni volta che c'è da scrivere fare un max su > una lista di 1000 elementi (quella delle lunghezze, che può essere > tranquillamente creata al volo - len ha costo costante, giusto?), e non > mi sembra che possa avere un gran impatto, anche nel caso pessimo in cui > le righe destinate ai diversi file ricorrano con frequenze molto simili. Questo non occupa una quantità di memoria costante: potrebbe essere difficile da controllare (metti se per esempio molti dei file si "gonfiano" ma poi restanto a lungo non chiamati in causa: questi resterebbero in ram per non far niente). Ha anche alcune quadraticità (il singolo len è o(1) ma il max è o(n)). Come caso pessimo la tua ricetta ha quello delle frequenze simili, La mia ha il caso in cui in ogni blocco di record letti (es. 1 milione) ogni record vada in un file distinto (es. 999 record in 999 file, tutti gli altri in uno solo). Il mio caso pessimo mi sembra più improbabile :) Anche come implementazione la mia ricetta mi sembra più semplice. -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python