[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-talk
Subject:    Re: Does this code spawn lots of objects?
From:       Robert Klemme <shortcutter () googlemail ! com>
Date:       2007-05-31 13:45:12
Message-ID: 5c81qaF2v7p8hU1 () mid ! individual ! net
[Download RAW message or body]

On 31.05.2007 15:42, Ben Edwards wrote:
> On 31/05/07, Robert Klemme <shortcutter@googlemail.com> wrote:
>> On 31.05.2007 13:49, Ben Edwards wrote:
>> > 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      = "ben.edwards@ingenta.com"
>> >  mail.from    = "ben.edwards@ingenta.com"
>> >  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?
>>
>> 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?

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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic