C# - Winform Application, Does Window Minimize Force Garbage Collection?
Feb 8, 2011
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.
If you have ever noticed in the Task Manager, when you right-click on the running task, you have many options which include 'Minimize' and 'Maximize'. Is there anyway to do achieve this in vb?
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?
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 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 show a new non-modal child window using .Show(frmParent), and then the parent window is minimized, the child will get minimized automatically as well.
I have a simple GUI form to hide / show / minimize / terminate / force terminate Processes. i can do all well but for show and hide i need the MainWindowHandle to show or hide it
So here is hide process code:
Dim Proc As New Process = Process.GetProcessesById(List.SelectedRows(0).Cells(1)) Dim hwnd = Proc.MainWindowHandle ShowWindow(hwnd,0)
If i try the same with show code:
Dim Proc As New Process = Process.GetProcessesById(List.SelectedRows(0).Cells(1)) Dim hwnd = Proc.MainWindowHandle ShowWindow(hwnd,9)
The MainWindowHandle become 0 cuz its hidden is there is any other way to get the MainWindowHandle of Process ?
I have a custom collection which is derived from a base class implementing IEnumerable and IEnumerator, this collection is populated with custom objects.I'm trying to set the datasource on a ComboBox on a WinForm to use the above collection - but when the code is run the ComboBox is always empty.
The code I was using was this:
Private Sub ViewSources_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load ' declaration Dim sourceCollection As SourceCollection Dim source As Source
I have a list of Active Directory entries (computer names) as a Collection data type. How can I add the computer entries and the pertinent columns to the DataGrid control on my WinForm? I have borrowed this code from some web site to add the list of computer to the pcList which is a Collection type. pcList.Add(dirSearchResults.GetDirectoryEntry().Name.ToString())
I have a script code in vb.net environment which is calling file from path but when i call the file the window remain opened i want to hide it.[code]...
I am making a console application that basically just takes in rainfall over the year, then exports the data into an Excel template and saves it. I've accomplished all this but cannot for the life of me get the window to minimize. I can change the size but everything I've tride doesn't work.
... Dim Desen As System.Drawing.Pen Desen = New System.Drawing.Pen(System.Drawing.Color.FromArgb(vectorCulDrLn(0), vectorCulDrLn(1), vectorCulDrLn(2)), drwgln) Dim Grph As System.Drawing.Graphics = programNods.CreateGraphics() [Code] .....
If I minimize the window or drag it "out of the screen" the "inserted" lines will be "cleaned"... How can I draw them again? OR How can I draw them in such a way to not lose them after I minimize the window or drag it "out".
this maybe an easy one for mos of you! I have a windows that is displayed as full screenThe window contains a series of images (movie posters) and the name below it. When you user clicks on a movie poster a new window appears (smaller window) in the middle of the screen.I want to force the user to close close on the small window before procedding. Currently if the user clicks outside the small window the full screen window comes to the front thus hiding the smaller window.
I have a webbrowser control built into a windows form of my application and I was curious if there was a way that any links that are clicked on in the webbrowser control will be forced to open in a new browser window?
I am writing a VB program in VB 2008 express edition, and I need to make a simple web browser used by touch screen users. I have done making the simple web browser to browser the webpage, but when I open some links they are opened in the external IE rather than the VB web browser, how can I force all web page to be opened in the VB software?
How do I minimize all active forms in my application with a single button click?I have multiple forms visible at a time, and I want all my active forms to minimize when I click on a single button on one of the forms.
I have got Skype configured to launch minimized on windows starts.Now I need to bring Skype to front from a button from my full screen application button. I have got this code:
For Each p As Process In Process.GetProcessesByName("skype") ShowWindow(p.MainWindowHandle, SHOW_WINDOW.SW_NORMAL) Next p