Does this code spawn lots of objects?

I have the following code:-

dbh = DBI.connect(’’, '’, ‘’)
smtp = Net::SMTP.start(’
’)
sql = open( “gw.sql”, “r” ).read
sth = dbh.execute( sql )
sth.fetch_hash do |row|
mail = MailFactory.new()
mail.to = “[email protected]
mail.from = “[email protected]
mail.subject = “file from ingenta”
mail.text = “Here is the file”
mail.attach( “./” + row[“IDENTITYID”] + “_” + month + year + “.csv” );
smtp.send_message( mail.to_s(), mail.from, mail.to )
end
sth.finish
smtp.finish
dbh.disconnect

This code seems to cause a new object to be created for every
iteration of the iterator. However is it true that ‘mail =
MailFactory.new()’ causes the previous Mailfactory object not to have
a reference to it and therefore it can be garbage collected?

Is there a better way of coding the above?

Ben

On 31.05.2007 13:49, Ben E. wrote:

mail.subject = “file from ingenta”
MailFactory.new()’ causes the previous Mailfactory object not to have
a reference to it and therefore it can be garbage collected?

Is there a better way of coding the above?

Probably not much room for improvement. One thing you can do for sure
is to use the block form of those various connections / IO’s you are
using. And you can read in a complete file by doing
File.read(“ge.sql”).

Probably you can also reuse the MailFactory (from, to, subject and text
don’t change anyway). But I have no idea whether that will create any
improvement. And I also do not know that class so take this advice with
a grain of salt.

Another idea is to start a second thread for mail sending. Connect both
threads with a queue with limited size. That way you may use IO
resources more efficiently.

Kind regards

robert

On 31/05/07, Robert K. [email protected] wrote:

mail.from = “[email protected]
iteration of the iterator. However is it true that ‘mail =
MailFactory.new()’ causes the previous Mailfactory object not to have
a reference to it and therefore it can be garbage collected?

Is there a better way of coding the above?

Probably not much room for improvement. One thing you can do for sure
is to use the block form of those various connections / IO’s you are
using. And you can read in a complete file by doing File.read(“ge.sql”).

What difference will this make?

Thanks for advice,
Ben

On 31.05.2007 15:42, Ben E. wrote:

mail.to = “[email protected]
This code seems to cause a new object to be created for every
Sorry, forgot to ask. What do you mean by block form?
DBI.connect(’’, '’, ‘*’) do |dbh|

end

You gain safety because it’s guaranteed that the connection is closed
regardless how the block is left (normal, exception).

Kind regards

robert

On 31/05/07, Robert K. [email protected] wrote:

mail.from = “[email protected]
iteration of the iterator. However is it true that ‘mail =
MailFactory.new()’ causes the previous Mailfactory object not to have
a reference to it and therefore it can be garbage collected?

Is there a better way of coding the above?

Probably not much room for improvement. One thing you can do for sure
is to use the block form of those various connections / IO’s you are
using. And you can read in a complete file by doing File.read(“ge.sql”).

Sorry, forgot to ask. What do you mean by block form?

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs