We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Programming Practice adivce -- Tight Loops and New

RichardKline
RichardKline asked
on
Medium Priority
318 Views
Last Modified: 2010-04-23
Is this code inherently bad?  
The datareader has about 30,000 rows.   At this point, the Cls1 and Cls2 classes perform no operation other than Get and Set values.     Ultimately SQL database updates will be done based upon Cls2Instance values.

The reason that I ask is that VS2005 truly yelled at me while running this in test mode.  I didn't write down the error at the time but, in essence, it had to do with MDAs and running dangerously close to being out of memory.    I watched the Task Manager while the app ran and, indeed, the available workstiaton memory shrunk at a good clip.  

These instantiations are done in a very tight loop.  But will loosen up after the complete code is in place.   I'm assuming that the garbage collector can't keep up right now.

So the questions:
1.  Should class instantiations be done like this?
2.  Is there a way to programmaticly (spelling) dispose of the Class at the end of each loop?
I could just variables and update them upon each loop iteration but.... that seems inelegant.   Each of the two classes has about 45 elements.

Thoughts?

Thank you.
 
           While dr.Read()
                Dim Cls1Instance As New Cls1
                With Cls1Instance
                     ' Assign Values
                End With

                Dim Cls2Instance As New Cls2
                With Cls2Instance
                      ' Assign Values from Cls1Instance
                End With

               ' Update SQL database with Cls2Instance values
            End While
Comment
Watch Question

Commented:
What is dr.Read() here? It almost looks like you are reading out of a database, assigning them to a Cls1 Class, and then Taking all your values from Csl1 class and putting them in Cls2 class, and then reading them back into the database?

I guess I don't know enough from what little you posted to let you know if there is a better way to do this. Although one thought would be to created the Cls1 and Cls2 classes outside of the loop, and just reuse them each time, clearing them out after doing the database update. That should lower your memory usage.

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
you can always do GC.Collect(); to force collection, but i dont think its needed in your example.

but like Xeavn said, initialize outside of the loop.  youll conserve a lot of memory that way.

Author

Commented:
Thanks!

It's an database update app.  Reading from a text file, doing some manipulation magic and then updating a database with new/modified records.

Commented:
I agree with the other 2 guys. If you wrote Cls1 & Cls2, you could add a method called Clear or Reset or something that would essentially return the object to the same state as when it was created.

GC.Collect will force garbage collection. This would work, however, you have to be careful about how many times you call it as it can have a very negative effect on your app's performance.
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.