rowternet
asked on
Dataset - Out of memory Exception
Hi all,
I have a database table with 60 columns.
I am bringing the data from the table into the dataview and using the dataview, i am filling a grid.
This dataset will be having around 300 rows or more.
dataSet = New DataSet
myDataAdapter.Fill(dataSet , "Regulars")
dv = New DataView(dataSet.Tables("R egulars"))
This grid will refresh every 30 seconds. So, every 30 seconds, a connection to the databse is made and the above 3 steps are repeated.(Winforms Application)
Now i am getting outofmemoryexception.
Is there anything wrong with the way i am filling the grid?
Each time a dataset is created and filled, would it automatically clear or dispose the existing dataset?
Thanks in Advance
I have a database table with 60 columns.
I am bringing the data from the table into the dataview and using the dataview, i am filling a grid.
This dataset will be having around 300 rows or more.
dataSet = New DataSet
myDataAdapter.Fill(dataSet
dv = New DataView(dataSet.Tables("R
This grid will refresh every 30 seconds. So, every 30 seconds, a connection to the databse is made and the above 3 steps are repeated.(Winforms Application)
Now i am getting outofmemoryexception.
Is there anything wrong with the way i am filling the grid?
Each time a dataset is created and filled, would it automatically clear or dispose the existing dataset?
Thanks in Advance
ASKER
Hi lenordiste,
This is in production and i cannot change the code to use the binding source at this time.
There is a lot of manipulation going in there before i fill the grid.
But these are the 3 steps which i think are causingthis issue.
Whenever i use a myadapter.fill(ds), would the new data be appended to the dataset or overwrite the existing dataset?
I assumed this would overwrite.
msdn documentation for dataadapter says this:
"You can use the Fill method multiple times on the same DataTable. If a primary key exists, incoming rows are merged with matching rows that already exist. If no primary key exists, incoming rows are appended to the DataTable."
Since i am using the ds = new dataset, what happens to the previous dataset would it be removed or no?
Thanks
This is in production and i cannot change the code to use the binding source at this time.
There is a lot of manipulation going in there before i fill the grid.
But these are the 3 steps which i think are causingthis issue.
Whenever i use a myadapter.fill(ds), would the new data be appended to the dataset or overwrite the existing dataset?
I assumed this would overwrite.
msdn documentation for dataadapter says this:
"You can use the Fill method multiple times on the same DataTable. If a primary key exists, incoming rows are merged with matching rows that already exist. If no primary key exists, incoming rows are appended to the DataTable."
Since i am using the ds = new dataset, what happens to the previous dataset would it be removed or no?
Thanks
ASKER
Another question:
The page that has the grid will be open atleast 12 hrs a day ata stretch.
Can i dispose the dataset after i populate teh gridview?
Would it cause any issues?
The page that has the grid will be open atleast 12 hrs a day ata stretch.
Can i dispose the dataset after i populate teh gridview?
Would it cause any issues?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
hi gamarrojgg,
i think this answers my question.
This ds and dv are declared public to the class.
I may have to explicitly dispose them or use myadapter.dispose as you mentioned.
I might leave this question open for a while before i close.
Thanks
Depending on the scope of the dataSet variable, if the variable is declared inside a method it should be destroyed when the method finished, but if it is declared outside a method it would persist until the CLASS that contains it is detroyed.
i think this answers my question.
This ds and dv are declared public to the class.
I may have to explicitly dispose them or use myadapter.dispose as you mentioned.
I might leave this question open for a while before i close.
Thanks
ok, great, another thing would be your Connection to the Database, are you passing a Connection Object to the Dataadapter? or you are passing the STRING CONNECTION? because the out of memory exception could happend if you have Connections leaks, so you may check that you are closing/disposing your connections
ASKER
gamarrojgg,
I should not dispose the dataset and dataview i guess that would erase the data from the gridview.
Connections are not a problem. They are being closed.
Or i have to declare the dataset and dataview locally not at form level.
Right now i am having it like this:
Dim dataSet as dataset
dim dv as dataview
public sub mymethod()
dataSet = New DataSet
myDataAdapter.Fill(dataSet , "Regulars")
dv = New DataView(dataSet.Tables("R egulars"))
end sub
I should not dispose the dataset and dataview i guess that would erase the data from the gridview.
Connections are not a problem. They are being closed.
Or i have to declare the dataset and dataview locally not at form level.
Right now i am having it like this:
Dim dataSet as dataset
dim dv as dataview
public sub mymethod()
dataSet = New DataSet
myDataAdapter.Fill(dataSet
dv = New DataView(dataSet.Tables("R
end sub
well, once your Dataview is assigned to the gridview and the DATABIND method of the gridview is called , you can Dispose you dv object.
It wont affect you grid if you dispose the Dataset and Dataview after that.
It wont affect you grid if you dispose the Dataset and Dataview after that.
ASKER
Hi
Please Select gamarjogg comment ID:ID: 35160424 as answer.
I selected my comment as answer by mistake.
Thanks.
Please Select gamarjogg comment ID:ID: 35160424 as answer.
I selected my comment as answer by mistake.
Thanks.
ASKER
Thanks
Here is some info on "bindingsource":
http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx
and here is an article from MS explaining how to fix the memory leak problem using a BindingSource:
http://connect.microsoft.com/VisualStudio/feedback/details/92260/datagrid-memory-leak-resulted-from-failed-clear-of-databind