Solved

Programming Practice adivce -- Tight Loops and New

Posted on 2006-10-24
4
239 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
0
Comment
Question by:RichardKline
4 Comments
 
LVL 4

Accepted Solution

by:
Xeavn earned 175 total points
ID: 17798546
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.
0
 
LVL 8

Assisted Solution

by:bramsquad
bramsquad earned 75 total points
ID: 17798955
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.
0
 
LVL 1

Author Comment

by:RichardKline
ID: 17799583
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.

0
 
LVL 14

Expert Comment

by:ptakja
ID: 17799599
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.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Internet Business Fax to Email Made Easy - With  eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, f…
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now