Datatable Object Within Class Function + Garbage Collection?
Oct 6, 2009Datatable object within class function + garbage collection?
View 3 RepliesDatatable object within class function + garbage collection?
View 3 RepliesIf I use a single variable of type Excel.Worksheet to reference Worksheet1, and then change it to Worksheet2, Worksheet3 and so on, is it adequate to simply do "Marshal.FinalReleaseComObject(worksheetVariable)" once at the end? Or would I be left with some references still in memory? In other words, do I need to do a "Marshal.FinalReleaseComObject" before each re-assignment?
View 3 RepliesI have a theory that the CLR garbage collection mechanism means that I can get away with circular references in my object hierarchy without creating deadlocks for teardown and garbage collection. Is this a safe assumption to make? (Target language VB.NET)
View 2 RepliesI thought that when a variable went out of scope (like a variable declared within a method - when you exit that method the variable is out of scope) then it was eligible for garbage collection and when it was garage collected the Dispose method is called on it. Now I know that it does not get disposed immediately but I assumed it would be basically as soon as the process starts to take up quite a bit of memory.However, I found that my app's memory usage seems to constantly increase when I dont manually Dispose of a specific method local variable. Of course its good practice to call Dispose and ordinarily I would but I just didn't realise that this particular class actually implemented IDisposable. The class in question was the System.DirectoryServices.SearchResultCollection class, and I was looping through the items in it like so:
[Code]...
I'm creating a windows forms program and have recently noticed a large amount of memory slowly being eaten by the application. I went through my program and tried to tie up as many loose ends as I could in relation to object creation but noticed that the program would still keep memory for every form loaded until it eventually crashed.
I decided to make a simple test program which sole purpose is to pop-up a new form with a few controls, wait for 200 milliseconds, then close the form and repeat the process 30 times every time I hit a button. I found it caused the same behavior, even with the only new object creation being that of the form. So, I decided to manually invoke the garbage collector in a subroutine which handles the formclosed event. During tests I would get some memory back occasionally, but not enough to make a difference in the long run. So I start setting the form variable to nothing before I called GC.collect(). The program will initially eat a few 1000K of memory before leveling off and using only 20-40K for every 30 forms created.
Now what I'm wondering is, what is the point of an automated garbage collection system if it requires constant manual evocation and explicit dereferencing of all new objects to be effective? Have I completely lost grasp on the scope of VB.Net forms and it simply never marks forms as available memory to be cleared?I would have thought object memory references created within a form would be marked as usable when the form's close or dispose routine is called and no references to objects created within the form exist anywhere outside the closed form.
I am trying to create radiobuttons, and then create code for them after they are created. I have the code to create the radiobuttons. What I want to do is create a sub for the event of changing the check value for the radiobutton. Or to have the check value recognized by a button click. For example, you click the button and if the first radiobutton has the circle filled then a msgbox comes up and says hurray. My code so far is this:
View 6 RepliesI am using a function from a dll in unmanaged code that requires a callback to my managed code in Visual Basic 2010. The callback is asynchronous and is called continuously over the life of the application. What's the best way to protect the callback function from the garbage collector? Right now it is being collected after several dozen calls from the dll.
View 11 RepliesI've been doing some reading on garbage collection in .NET and I was hoping for some clarification. So, as I understand it if I declare a public shared class variable, the GC will never get rid of it. Is this correct?Also, what then of private variables? Take the following example:
public class myClass
private shared myString As String
public sub ChangeString(newString As String)
[code].....
I have a callback function in a C+ dll:
<UnmanagedFunctionPointer(CallingConvention.Cdecl)> _
Public Delegate Sub DeviceDetectionEvent(ByVal YasdiEvent As YASDIDetectionSub, ByVal DeviceHandle As UInteger, ByVal param1 As UInteger)
[code].....
Is the memory from primitive data types (int, char,etc) immediately released once they leave scope, or added to garbage collection for later release?
consider:
For x as integer=0 to 1000
dim y as integer
Next
If this doesn't add 1000 integers to the garbage collector for clean up later,how does it treat string objects? would this create 1000 strings to clean up later?
For x as integer=0 to 1000
dim y as string=""
Next
How about structures that contain only int,string,etc... data types?
Here's the scenario, winforms application, monitoring via Task Manager Processes Tab.On initial launch spins up to ~61,000K (initial data grid and data loads)If I minimize the application, not touching or doing anything the Mem usage drops to 1,380K.When I restore the application is spins back up to only 5.8K
So my question is, does the minimize send some internal message to clean up resources since the application in question is not in focus?The first app I noticed this in happens to be VB.NET, but I've observed the same behavior in my main C# winform applications.
I am having trouble setting up these classes.I need to set up a customer collection class that has one function GetCustomer(ByVal customerNumber As Integer) As Customer..The customer class reads a file and returns 5 fields and x number of records.My question is do I set up the 5 properties (fields) in the Customer class and if there are 10 records that match how do I return the customer object to the customer collection class. I don't care about exact syntax but could someone show me how these 2 classes should look?
View 2 RepliesI am moving from VB to C#. I am trying to loop through a collection class which is a collection of data classes but I can't seem to get the actual values out of the data class properties(find the correct code to do so). I have a method that loops through the collection class(Contacts) and saves each record(Contact). I am using reflection because my method will not know if it is Contacts class or a Customer class and so forth. Here is my code in VB(watered down)
Public Function SaveCollection(ByVal objCollection as Object, ByVal TableName as string, ByVal spSave as string)
Dim objClass as Object
[Code]....
The C# code keeps returning null. In my locals window I can see the proprties on the class on objClass and the value of the propery but I can seem to figure out how to access it through code. I used the DictionaryBase because that seems to closely match would I need to do. My data class(Contact) has a bunch or properties that match the field names in the database of the Contact Table. After I get the propInfo variable set I then set up my SQLParameter with the fieldname, datatype etc and then set the value to the propInfo.value.
I have a datatable being returned by my DAL. In my BAL I want to return a class object. So I have a class called BusinessArea that has ID, Description and Active properties. I tried this:
[Code]...
When I declare two datatables and fill them both from a datatable returned by a function in class, that when i filter the one it seems to filter the other aswell?
For example:
I declare the datatable and initiate my class:
Dim DatatableOne As New Datatable
Dim DatatableTwo As New Datatable
Dim MyClass As New MyClass
I then call the function that returns a datatable and apply it to datatable1 and 2 Then fill two DataGrids with the table:
DatatableOne = MyClass.GetTable()
DatatableTwo = MyClass.GetTable()
DatatableOne.DefaultView.RowFilter = "Name = 'Tom'"
[CODE]...
For some reason i don't understand but both grids end up with the filtered data?
with VB.NET + MySQL i am having a connection object which is public public MYcnn as MySql.Data.MySqlClient.MySqlConnection when my main form opens MYcnn will open & will be available for all the procedures & functions. i never close this connection until the last form of the application closes (yes of course i compromise of some security + performance issues)
my problems is(1)when & how the garbage collector works to collect my connection object if my connection object remains open for > then certain time(2) how to offer or fix the time of my connection object availableness to garbage collector (3) i would like to write an event for the connection object closed event(i am explicitly declaring the connection object)
Dim x as whatever
Try
x = new whatever(1)
something is done with x
[code]....
What happens to x = whatever(1)Does garbage collection find the pointer to the first new and destroy it or what?
I've got a f(x) that returns a collection of user controls. .Net lets me just treat the f(x) name as the collection.
ex)
Private Function GetCcB() As Collection(Of Reports_ucColumn)
Dim cc As New Collection(Of Reports_ucColumn)
cc.Add(Me.ucColumn0)
[code].....
I'm looking for a tutorial on how to Adding a list(of Class) or Collection as another Class's Property.What I am after is something like the Columns Collection for the DatagridView control.I would like to add Items in the graphics screen. Where the item list is displayed in the left panel and the selected Item properties are displayed in the right panel.
View 4 RepliesI am utilizing a centralized class object that needs to call another class object. The program itself will do something like the following
sFieldValue = CentralObject.ObjectHandler(1, TestFunction, "FunctionVar,FunctionVar2,FunctionVar3")
In the central object I have a function
Public
Function ObjectHandler(ByVal ObjectType
As
Integer,
[code]....
I am somewhat new to object oriented programming and am attempting to flatten a Linq object hierarchy by using a shim class.how to initalize a derived class with property values from a base class?I have two objects, a base object with about 100 properties, and a derived object which inherits from the base object and adds a few additional properties beyond those of the base object. My simple constructor creates the derived object, but I am looking for a way to initialize the derived object properties with values from the base object.Right now I am using reflection to iterate over the properties individually and I suspect there may be a better way. The following example shows my shim class constructor for the derived class, and two properties:
newProperty1 - a new string property of the derived class
flattenedProperty2 - a new string property of the derived class, copied from a 2nd-level object of the base class
Code example:
Public Class derivedObj
Inherits baseObj
Private _newProperty1 As String[code].......
Is this the correct constructor approach to flatten the object hierarchy using a shim class? My second question relates to initialization of properties in the derived class. The constructor above creates the derived object, but what is the best way to initialize the derived object properties with values from the base object? The following code uses reflection to iterate over the properties individually, but I suspect there may be a better way.
Code example:
' property names are in the string array fieldNames
'baseObjQuery is an ienumerable of baseObj
'derivedObjList is a list of derivedObj[code].....
Is there a simple way to initialize values for the properties in the derived object based upon the values of the common properties in the base object?
I am writing a program that needs to read a set of records that describe the register map of a device I need to communicate with. Each record will have a handfull of fields that describe the properties of each register. I don't really need to edit or modify the data in my VB or C# program, though I would like to be able to display the data on a grid. I would like to store the data in a CSV file, or perhaps an XML file. I need to enable users to edit the data off-line, preferably in excel.
I am considering using a DataTable or a Collection of "Register" objects (which I would define). I prototyped a DataTable, and found I can read/write XML easily using the built in methods and I can easily bind to a DataGridView. I was not able to find a way to retreive info on a single register without using a query that returns a collection of rows, even though I defined a unique primaty key column. The syntax to get a value from a column is also complex, though I could be missing something on both counts.
[Code]....
I have a select statement and it will go to a datatable object, I would like to do the following
textbox1.text=datatable(first field value)
textbox2.text=datatable(second field value)
textbox3.text=datatable(third field value)
[code]The reason that this is a problem is that this is a collection of EventBase objects, but I'm trying to populate it with child classes instead. For example, I might have a JumpEvent class that inherits EventBase, and this is being put into the EventBaseCollection. That means that value.GetType() returns the type of JumpEvent, which as you might guess does not equal the type of EventBase.The goal of course is to simply loop through all of the various events without having to know anything about the sub-classes. Is there a way to determine the type of the base class so that the OnValidate call will work? Or is this just the wrong way to go about it altogether?
View 2 RepliesI seem to have problem with passing a collection/sorted list/ list of strings from one class to another.I am using property procedure to pass it, however nothing is sent to another class. There isn't any error messages either.[code]
View 3 RepliesI have recently started .NET programming, and looked at both VB.NET and C#. In VB.NET, a strongly typed Datatable cosisted of a collection of strongly types rows. Therefore, for example, this statement would work:
lCustomerTable As CustomerDataSet.CustomerTable
lCustomerRow as CustomerDataSet.CustomerTable.CustomerRow
lCustomerTable = TableAdapter.GetData
lCustomerRow = lCustomerTable.Rows(0)
However in C#, it seems i have to explicitly cast the returned Row to a CustomerRow:
lCustomerRow = (CustomerDataSet.CustomerTable.CustomerRow)lCustomerTable.Rows[0]
Should the dataset not create the object type definitions when creating the table adapters and SQL dataTables?
I have procedure (Import) that calls a for a new instance of frmImportData. I also have a class name clsBatch that has a data table property called prpParametersTable.For some reason, I get an error (indicated below with ERROR>>>) when trying to assign prpParameterTable to cv_dtImport2. The error states "Object reference not set to an instance of an object.". Why does this error not happen when I assign dtBP to cv_dtImport1? Both cv_dtImport1 and cv_dtImport2 are equal to Nothing and in my Import procedure dtBP = prpParametersTable.
Public Sub Import(ByVal clsB As clsBatch)
Try
Me.cv_clsB = clsB
[code]....
this is more a theoretical question i asked myself.I remembered that BinarySearch of an ordered List(Collection in general) is faster than finding Rows with Datatable.Rows.Find or DataTable.FindByPK with a primary key value.Hence i fill a Datatable from Database in a shared constructor and immediately after that a List(of Int32) that contains all primary keys from that table. Later i will check with BinarySearch if the List contains primary-key values. But because the datatable contains only the PK-Column anyway, i asked myself if there is a way to avoid the huge overhead of filling a Datatable and after that adding all Rows to a List. Is it possible to fill a generic List(or other collection-type) instead of a Datatable/Dataset directly from a Dataadapter?Maybe i'm off the track and there is another way to avoid the Extra-Loop that i'm missing.
The code of filling the DataTable in a strong typed Dataset and the List:
Private Shared w205CorrectSWUpgrades As New List(Of Int32)
Shared Sub New()
[code].....
I'm trying to query a DataTable to get a collection of rows but I'm finding that my search string has to be the exact length of the columns width. So, for example this won't work:
Dim rows As DataRow() = (From r In myTable.AsEnumerable() Where r.Field(Of String)("fname") = "Bob").ToArray()
...but this will:
Dim rows As DataRow() = (From r In myTable.AsEnumerable() Where r.Field(Of String)("fname") = "Bob ").ToArray()
The search term ("Bob") has to be padded with spaces to make it equal in length to the column width (10 characters). Is this how it's supposed to work or am I doing something wrong?Also, how can I do a LIKE search? So for example, I want to search for all names that start with "Bo" or whatever. ie. "Bo*".
I'm am creating a "pop-up" CheckedListBox over a button on my DataGridView. The values in the list are going to be filtered based on the value in column 0 of the DataGridView.I have already pulled in a "master" DataTable with two columns: ACODE and MATRIX.I want to call the following function and return an array of strings that I can use to build this CheckedListBox with. The line between "For Each r" and "Next" generates a "Number of indices is less than the number of dimensions of the indexed array". The number of items is variable in the array so I can't predefined it. I know I'm going down the wrong path.
Function StudyGroupSamples(ByVal sampleType As String) As String()
Dim thisArray() As String
Dim theseRows() As DataRow
[code]....