C# - Does The CLR Garbage Collection Methodology Mean It's Safe To Throw Circular Object References Around
Feb 3, 2010
I 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)
If 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?
I have a button which opens FormTest. When FormTest opens, it creates an instance of ClassTest and that class instance takes the form instance that called it (FormTest) so that it can perform operations on FormTest from the ClassTest class instance. So i have a form which owns an instance of a class which has a reference to the form.
I'm implementing some custom serialization (to byte array), and have run into a problem handling circular references.Example:
Class A public MyBs as new List(of B) End class
Class B public MyParent as A public MiscInt1 as integer[code]....
If I know that an instance of B will only ever be serialized through the serialization of an instance of A, then I can handle the setup of the MyParent reference from the instance of A and not even record that information inside the byte buffer for the instance of B.This doesn't feel quite right, but it might be the best solution.
so i have a Method that is going to made Thread Safe. can i have something like this in the Method:
Public Class Q Private Shared ASD As New MyException("") Public Sub W Throw ASD if multiple threads attempt to throw the Shared exception ASD, will there be an error in the catching part? The alternative of course is to: Throw New ASD but i'm just checking to see if the first way is thread safe
Role Public Class Role Public Property RoleID As Integer Public Property CreatedBy As User
[code]....
The situation is like when we create roles, we will save who created this role. So i have a CreatedBy Property of type User. Similarly when we create a User, we will mention what role the new user belongs to .So i have a property called "Role" of type "Role". This circular reference giving me StackOverflow exception as its recursive when i create an object of User class.How do i handle this ? should i restucture my entties ? how ?
I 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:
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:
I 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.
I'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)
<UnmanagedFunctionPointer(CallingConvention.Cdecl)> _ Public Delegate Sub DeviceDetectionEvent(ByVal YasdiEvent As YASDIDetectionSub, ByVal DeviceHandle As UInteger, ByVal param1 As UInteger)
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.
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)
I would like to store references to a bunch of structs in a collection. The general scaffolding looks like this:
Structure myStructType Dim prop1 as String Dim prop2 as int End Structure
[Code]....
now this doesn't work, because it's referencing the same memory. What I would really want is the 'pass reference by value' behaviour that is also used for reference types, so that I can easily keep producing more of them.
Is there any way to fix this other than to make the structs into classes? Is this actually a proper way to use structs, or do I have it all wrong?
I get an error while trying to install a third party Excel add-in [Thomson One Analytics]. Error: "Compile error in hidden module: Main" Microsoft Excel 2003..But when I had the Addin unlocked.I noticed that it was getting stuck at a specific line in the MAIN module of the Addin package and the debugger throws a compile error message saying that: "Object library Invalid or contains references to object definitions that could not be found". Earlier when I had this issue,I made another user login to the PC and we were able to use the add-in successfully. But this time even a different user with Admin Rights was not able to use it. [code]
Tried to install and run the Addin on the same computer by a different user having admin rights, no go.Made sure that he references for the add-in in the VBA editor are correct, by comparing them with a working computer, no go Re-installed "Service Pack 6 for Visual Basic 6.0: Run-Time Redistribution Pack (vbrun60sp6.exe)", no go. Ran repairs on Excel, no go Re-installed Excel, no go
(I've answered the question below with a hack. I'm fairly confident in it unless MS change the way that codedom serializers the designer code.)ETA2:I've worked out what is going on. I wondered why sometimes it would work and not others. It boils down to the name that I give to the internal property and the collection.If I rename the property 'Annoyance' to 'WTF', it will serialize correctly because 'WTF' is, alphabetically, after the name of the collection - 'InternalAnger'.It looks like the serializer is creating instances of objects alphabetically and needs my internal property to be created by the time it comes to create the collection.I can fix this with a rename, but that's a hack and I fear that writing a custom serializer is a big job - which I've never done before.ETA: Jesus, I'm sick of this. This problem was specifically about persisting an interface collection but now on further testing it doesn't work for a normal collection. Here's some even simpler code:
Public Class Anger End Class Public Class MyButton
I'm working with visual studio 2008 developing software for windows CE 6.0, compact framework.I'm having this "strange?" trouble with isNumeric method. Is there another better way to do this job? Why is getting me an exception? (two in facts...both of type FormatException)
dim tmpStr as object = "Hello" if isNumeric(tmpStr) then // EXCEPTIONs on this line // It's a number else // it's a string end if
I have a complex Regex which is used to help strip out HTML from user input. I'm aware that .NET caches static Regex calls to some extent, but this one is big and used frequently, so I'd like it to hang around.[code]...
I have a function GetAllProducts() which fetches all products from a database and stores it in the cache for future requests. This works fine, but if I then call the function e.g. ProductSearchResults = GetAllProducts(), and then modify ProductSearchResults variable, this also modifies the cache, which is very important this never happens, as the cache affects the whole website.
I understand this is because both ProductSearchResults and the cache now have the same reference, but how do I solve the problem? Is there something that I can put in GetAllProducts() to ensure the cache always uses its own value?
Maybe this is a n00bish question, but I'm used to c++'s pointers and references and this is confusing me a bit. Let's say I have the following scenario in a VB.net application:
[Code]...
The situation is this: I have a collection of objects, and during execution of the program, any of them can be fetched from the collection to be used/edited by another part of the program. Now obviously if I edit the data inside the object it is allright, but what if I want to replace the object, as I did above at line 5? I would change only the local reference (y) but not the object inside the collection!
Is there a way around this? How can I take with me a "reference to the object's reference", instead of just a reference, so if I reassign it it will also reassign the one in the collection? I hope I'm making myself clear, unfortunately english is not my native language, to be clear: in c++ this would be easy using a pointer to a pointer, or passing a pointer to the object always by reference, so calling new or reassignment on it would change the original pointer itself)
So I've created a series of objects that interact with a piece of hardware over a serial port. There is a thread running monitoring the serial port, and if the state of the hardware changes it updates properties in my objects. I'm using observable collections, and INotifyPropertyChanged.
I've built a UI in WPF and it works great, showing me real time updating when the hardware changes and allows me to send changes to the hardware as well by changing these properties using bindings.
What I'm hoping is that I can run the UI on a different machine than what the hardware is hooked up to without a lot of wiring up of events. Possibly even allow multiple UI's to connect to the same service and interact with this hardware.
So far I understand I'm going to need to create a WCF service. I'm trying to figure out if I'll be able to pass a reference to an object created at the service to the client leaving events intact. So that the UI will really just be bound to a remote object.
Am I moving the right direction with WCF?
Also I see tons of examples for WCF in C#, are there any good practical use examples in VB that might be along the lines of what I'm trying to do?
I understand the the Agile development methodolgy is popular. It's supposed to be a good way to develop projects. And potential employers want you to know it. So I would like to learn it. What are the best books, tutorials, tools and anything else that you can use to learn it?
I was trying to make a reference with a constant but of course I can't do that and before hand I get this error "Refrence to a nonshare member requires an object references" But umm I know I need to make an instance but I really am confused how for the construct. Here is my code: THis is just the class
I have Crystal Reports 2008 installed on my win7 laptop but when i go to insert references from my application settings the CrystalDecisions references are missing and im not able to find them. Note: they do exist in my "c:windowsassembly" folder.
In VB.Net is every ObjectCollection Zero based except 'Collection' object itself ???
Like if you have an ObjectCollection like attachments for a mail for example, which has .Count in it, then i have seen it is Zero based
But in case of the 'Collection' object it is 1 based. 'ie dim cc as new Collection.
I am just confirming this because you can't keep checking for each collection of objects if it is zero based or 1 based, because if you use the For...Next loop, then do we have to think always if it is
In an application I am working on I have created a product class which represents an inventory item. I have also created an inventory class which represents a collection of product objects. In the constructor of the Inventory class I load 4 products into a product collection. Each product consists of a code, description price and quantity.