Bonjour,
j'ai les relations suivantes :

Connections < AR::B
has_many paths

Path < AR::B
belongs_to :connection
has_many :cross_connections

CrossConnection < AR::B
belongs_to :path

j'ai énormément de connections (~3000), de chemins (~14000) et de
cross-connections (~200000).

Pour une action, je dois vérifier les cross-connections selon leur
chemin et donc leur connexion.
Je fais donc

@connections = Connection.find(:all,:conditions => mes_conditions)
@connections.each do |cnx|
   @result[cnx.id] = cnx.find_problems
end

dans le modèle Connection, j'ai la méthode suivante :

def find_problems
   result = Array.new
   paths.each do |path|
      path_id = path.id
      result[path_id] = path.find_problems
    end
    result
end

Enfin, dans le modèle Path, j'ai la méthode suivante :
def find_problems
   xc_main = Array.new
   xc_alt = Array.new
   (0..2).each do |i|
     xc_main[i] = Array.new
     xc_alt[i] = Array.new
   end
   xcs = CrossConnection.find_all_by_path_id(id, :order =>
"path_position ASC")
   xcs.each do |xc|
     if xc.is_on_main
       xc_path_part = xc.path_part
       xc_main[xc_path_part] << xc
     else
       xc_path_part = xc.path_part
       xc_alt[xc_path_part] << xc
     end
    end
    // travail sur ces tableaux, plus précisément sur une valeur de type
Integer de l'objet xc (exemple : modules_alt[1] =
((xc_alt[1][1..-1].collect {|xc| xc.ingress_device_module_id})
   result
end

Je ne passe qu'une seule fois par un objet CrossConnection donné.
Néammoins, lorsque je lance la vérification, ma mémoire n'arrête pas de
grossir et les garbage collector de jruby n'enlève qu'une petite
fraction des objets. Je pense donc que les objets cross connections ne
peuvent être déférencés...
Comment faire pour bien déréférencer ces objets pour être sur que le
garbage collector puisse récupérer la mémoire ?
j'ai l'impression que quand je fais par exemple :
modules_alt[1] = ((xc_alt[1][1..-1].collect {|xc|
xc.ingress_device_module_id}
dans modules_alt, je récupère pas la valeur mais qu'il mappe la valeur
qui est dans xc.ingress_device_module_id, ce qui fair qu'il ne peut
déréférencer l'objet xc. Et comme j'en ai 200 000, ça prend énormément
de place en mémoire...

Vous auriez une idée pour que je puisse gagner en mémoire ?

merci d'avance,

Sylvain
-- 
Posted via http://www.ruby-forum.com/.

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à