|
Hello everybody, I have an issue about GDI objects.
Whenever the form close and then reload the no of GDI objects is increasing continously in task manager. Although objects of form is disposed on every form closing time but it is increasing. How I can dispose all those objects which are not disposing.
|
|
|
|
|
You have to call Dispose on any GID object THAT YOU CREATE that offers a Dispose method.
If you've forgotten to Dipose something, you can't go back later and just do a global Dispose. You have to fix your code and Dispose of the object properly when you're done with them, because once the object variable falls out fo scope, it's too late to call Dispose on it.
|
|
|
|
|
You should dispose explicitly of any objects that offer a Dispose() method, in a WinForms GUI environment that would include Fonts, Pens, Brushes, etc. And also any Graphics, which you normally don't need to create at all as the Paint handler provides one for free (you should NOT dispose of that one, you did not cause its creation!).
I typically do not create new Fonts/Pens/Brushes in my Paint handler, I create them once and keep them around as static class members (gives better performance), and I do not dispose of them at all. Them being static means extra instances of the Form don't add to the GDI count.
|
|
|
|
|
Hi All,
Yesterday I asked the about the best way to handle strings in C# and got myself into and out of a hole. Today I have the result nicely in a rich Text Box with no spaces/awkward characters now I would like to search the List of data as I'm guessing this is more efficient than going through the text property of the rtb.
<pre lang="c#">
for (int i = 0; i <= NAME.Count - 1; i++)
{
richTextBox2.Text += NAME[i] + "\n";
} //loads the rtb!
bool exists = NAME.Exists(element => element == element);
MessageBox.Show(exists.ToString());</pre>
Vis Studio 2008 moans about comparing to itself ( a = a right?) the example I found was using integers so the line NAME.Exists(element => element > 10) translates as
element is set to equal element if element is greater than 10 so how do I convert this to use strings (my hopeful use of ToString() didn't seem to work!)
Glenn
(update: Hmm Code tags arn't working??)
|
|
|
|
|
bool exists = NAME.Exists(element => element == searchString);
|
|
|
|
|
Okay,
Thanks for that, searchString Vis Studio 2008 can't find. Is it .NET4.0 VS2010 thing or
is part of a using that I am not using or is it a hand rolled thing?
Glenn
|
|
|
|
|
Uh, that would be a variable you create to say what you're searching for.
|
|
|
|
|
|
Aaah LINQ there something...
|
|
|
|
|
I wouldn't search against the content of a GUI Control, I'd rather search some memory-based data structures (a List!) and keep my business code GUI-independent.
PS: watch the "Treat my content as plain text, not as HTML" checkbox.
|
|
|
|
|
Thanks, I am doing that (or trying to!) also I spent a little while trying to figure out
why the code was not appearing correctly,
I now have:
for (int i = 0; i <= DataPitStop.Count - 1; i++)
{
richTextBox2.Text += DataPitStop[i] + "\n";
}
DataPitStop = DataPitStop.Distinct().ToList();
it seems to be working. Can I ask is this the efficient way of sorting data (I'm guessing that they will be using cheap netbooks with some form of Windows).
|
|
|
|
|
Hmm. That code isn't sorting anything, all I see is a chronological concatenation, and the elimination of multiples.
For maximum performance:
- I would NOT concatenate strings, and hence I would not use a TextBox or RichTextBox; I prefer a ListBox, it is a line-oriented control that never needs any implicit concatenation of strings;
- I would not rely on LINQ;
- I would not get a Count property more than once (you get it on every iteration of the loop);
- I would use a foreach, not a for loop;
- I would not work on string data (as in RTB content) unless the data really is text; the actual type (int, DateTime, whatever your data is) is always the preferred one for all operations other than human input/output.
- I would prevent multiples from entering the collection, rather than removing them afterwards;
- when needing a sorted result, I would consider using a collection that sorts all by itself (depends on circumstances, may be faster or slower).
- however I would not worry a bit if Count is below say 100.
|
|
|
|
|
.... The elimination of multiple was really all I was after (RF system gives back data unreliably, varies on the surroundings/antenna position etc.)and cataloging all the devices that can be seen. The sorting will be via third party routine which I just pass strings to. Chronological Concatenation(?) do you mean after a time the values get over written (in part)?, as I was planning to clear the box after 60 reads....
Glenn
|
|
|
|
|
Chronological Concatenation: you concatenate them as they come in, in chronological order, that isn't sorting anything.
|
|
|
|
|
I miss my soldering iron! well at least that explains that.
Glenn
|
|
|
|
|
Beware RoHS!
|
|
|
|
|
Ahh, We do a lot of work for the US, not quite so picky as the EU!
|
|
|
|
|
He's already doing that, NAME is a list or array that he's filling the control from, but he's searching against the in-memory list (NAME) which is correct.
|
|
|
|
|
sorry, my mistake.
|
|
|
|
|
glennPattonWork wrote: i <= NAME.Count - 1
What's wrong with i < NAME.Count ?
|
|
|
|
|
NAME.Count There was a reason I wanted to sort to one below the limit not to the limit.
The reason was I wanted the last entry to be left untouched.
(honestly!)
Glenn
|
|
|
|
|
That doesn't explain the = .
|
|
|
|
|
Well it comes from for() and while() loops you don't need there but a belt and braces approach is not a bad thing to foster in my opion.
|
|
|
|
|
|
I agree in looking at the code, but my fingers type it out of habit now (I always review code before its release on unsuspecting users!)
|
|
|
|