Rafael,

tenes algunas variables temporarias que pueden estar afectando la
performance ya que solo se utilizan para pasos intermedios. Recordá
que en lenguajes con un GC cada vez que reasignas una variable estás
marcando para que sea borrada en el próximo ciclo de recolección si no
hay ninguna referencia, eso va a consumir tiempo y te esta consumiendo
memoria.

por ejemplo primero inicializas v1 = [] y luego le asignas un valor v1
= str1.split()... eso hace que el primer array que se creo en la
asignación se marque para recolectar.... y ese array nunca llega a
usarce... y lo mismo con str1, solo se utiliza como variable temporal
para luego hacer el split, quizás probaría de redefinir la primera
parte con algo así:

s1=File.readlines("f11.txt")
largo1 = s1.size

s2=File.readlines("f12.txt")
largo2 = s2.size

v5 = [0,0,0,0,0,0,0,0,0,0]

pf1 = 0
while pf1 < largo1
  v1 = s1[pf1].split()
  pf2=pf1 + 1
  while pf2 < largo1
    v2 = s2[pf2].split()
    pf3=0
...


al final de cada ciclo de pf1 quizas se puede poner un GC.start para
recolectar todos esos split que se hicieron y que estan dando vueltas
en el limbo o ponerlo en pf2 si son muy largos los archivos.

Si son muy largos los archivos, recordá que los estás leyendo en
memoria... quizas otra posibilidad es reformular el algoritmo y leer
los datos del archivo a medidas que se van necesitando....


-- 
:: nelson ::
artesano de software
http://netflux.com.ar


2008/7/1 Rafael Bidegain <[EMAIL PROTECTED]>:
> El día 30 de junio de 2008 10:50, Lucas Sallovitz
> <[EMAIL PROTECTED]> escribió:
>>>> lo que podés probar es forzar la
>>>> ejecución cada tanto,
>>> como ?
>>
>> GC.start
> gracias, lo voy a probar.
>
>>
>>>
>>>> pero la otra posibilidad es que tengas un bug en
>>>> el programa y que las cadenas anteriores sigan referenciadas por otro
>>>> lado, con lo cual la memoria no se puede liberar.
>>> es posible, pero no creo.
>>
>> Eppur si muove :)
>>
>> El código en cuestión es muy complicado o privado?, si no postealo...
> No es complicado, ni privado pero no está documentado. :(
>
> Me demoré en enviarlo porque la versión con las asignaciones ya no la
> tenía por lo que la tuve
> que escribir otra vez
>
> el código está acá
> http://pastebin.lugmen.org.ar/4242
>
> mis sospechosos son las variables:
> str1, str2, str3, str4
> v1, v2, v3, v4, v5
>
> Este proceso lo _hacía_[0] para obtener una solución intermedia a un
> problema un poco mas grande.
> el problema grande consiste llenar una matriz de 18 por 9 con algunas
> particularidades:
> en cada linea tiene que haber 5 unos
> en la primer columna tiene que haber 9 unos
> en las columnas 2 a 8 tiene que haber 10 unos
> y en la ultima columna tiene que haber 11 unos
> -esto corresponde a las características que tienen que tener 6
> cartones consecutivos[1] de la loteria famiar o bingo-
>
> lo que yo pretendo con este proceso es llenar parcialmente la matriz
>
>
> [0] digo lo _hacía_ porque ya lo resolví de otra manera.
> [1] 6 cartones consecutivos que conforman una miniserie.
> --
> /* Rafael Bidegain
> Linux Registered User # 204304
> CaFeLUG Grupo de Usuarios de Software Libre de Capital Federal
> http://www.cafelug.org.ar */
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a