|
They should keep foreach and remove that presenter; it may be a fine topic for a white paper, not for a lengthy presentation IMO.
Anyway, I trust the majority of .NET programmers isn't going to come up with a decent way of measuring the difference; and in debug builds, it is much more advantageous to keep the exit condition simple, I once noticed a simple image manipulation slowed down by 33% due to x < myBitmap.Width in the inner for loop.
|
|
|
|
|
With the increased use of LINQ, I wonder if foreach will ever out of the framework.
|
|
|
|
|
that reminds me, I still have to look into the performance aspects of LINQ...
|
|
|
|
|
Though it isn't specifically LINQ this might give you an idea and a place to start, Entity Framework Performance[^]
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
OK. I'll read that tomorrow. Thanks.
|
|
|
|
|
I haven't ever got into performance issues of LINQ. LINQ is pretty handy when one needs quick code. I use it that way.
I am sure that when performance is a concern, there are bigger problems other than LINQ. People usually make mistakes in thinking before using it.
Someone here posted a message about VS being slow, It seemed to me that the code he wrote had too many unnecessary loops. Using a StringBuilder for string conversions won't save him.
|
|
|
|
|
I didn't do any formal 'proper' benchmarks but I did some loose measurements of a few simple functions when I first experimented with Linq and they didn't fair too well IIRC.
Not very scientific but all I have to offer
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier. (Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Indeed, my expectations aren't very high. We'll see.
|
|
|
|
|
Mark Nischalke wrote: I once attended an event where a presenter went to great and detailed lengths to show how for was superior to foreach. Of course he was oblivious to the fact that the audience ignored him after the first ten minutes and droned on for 45 minutes concluding that foreach should be removed from the .net framework.
..and nobody asked the presenter why there's two types of breaks in a car, assuming that one type is superior to the other?
I are Troll
|
|
|
|
|
If its a Toyota it doesn't matter how many types of brakes you have
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
Toyota breaks brakes
|
|
|
|
|
0) Yes, foreach may be more readable
1) for is generally quicker than foreach .
2) In some cases, you can't use for .
3) With foreach , you can't alter the collection
4) Breaking out of a foreach is generally poor design
4.1) Same with for , but you can set the test appropriately
In conclusion, it depends on the situation.
|
|
|
|
|
PIEBALDconsult wrote: In some cases, you can't use for.
Sure you can:
var enumerator = (new List<int> { 1, 2 }).GetEnumerator();
for (; enumerator.MoveNext(); )
{
MessageBox.Show(enumerator.Current.ToString());
}
PIEBALDconsult wrote: With foreach, you can't alter the collection
Depends on the implementation, actually. The built-in .Net collections have logic that checks if a modification has been made and the enumerator will throw an error if it detects a change was made to the collection while in a foreach. However, about every 2 or 4 billion changes, this detection fails (it uses an int to keep a version of modifications made to a list, so it overflows and keeps looping like that), so sometimes it does not throw an exception (this is actually a bug I reported on Microsoft Connect). And you can create your own collection that doesn't have this type of logic. And you can make the modification, so long as you trap the exception (i.e., the list will remain modified, but you will break out of the loop). You can also break out of the foreach after you make the change (but before the next iteration) and no exception will be thrown. Similarly, you can make a change to the last item in the collection and that should prevent an error from occurring as well (as there is no next iteration). What you stated is generally correct, but I thought I'd let you know about a few of the nuances related to when it might not be.
|
|
|
|
|
aspdotnetdev wrote: for (; enumerator.MoveNext(); )
I hadn't thought of that. Now I'll try to forget it.
aspdotnetdev wrote: every 2 or 4 billion changes
I'd forgotten about that; it hardly seems worth remembering.
|
|
|
|
|
For each their own.
|
|
|
|
|
I am developing a resume builder software for users to build there resumes and export to MS word in different layout.. I thought of saving the resume details (personal, work experience, education, etc) in OpenXML but it seems I will be limited to one layout or it will too complicated to have different layouts as output.. what's your idea? save it in XML and manupulite to export as MS Word using MS Word Object? or binary database? or what?
|
|
|
|
|
I've always thought that a database would work best for that, but I've never actually tried to do it.
|
|
|
|
|
but the question why should I install SQL server express and add additional 200MB to my setup package? that's the only thing i don't like..
|
|
|
|
|
I don't like it either!
It's why I suggest VistaDB[^]!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station....
_________________________________________________________
My programs never have bugs, they just develop random features.
|
|
|
|
|
i know about it... i tried it before BUT it's not FREE my friend...
|
|
|
|
|
jrahma wrote: add additional 200MB to my setup package
Don't. Just document that it requires SQL Server; the user may already have it anyway. Or, better yet, make it database agnostic.
Same with .net; don't include it in the installer, the user probably already has it.
|
|
|
|
|
200 MB is for the full package with management tools, something I doubt you would need for clients. Its 84 MB for just the database, still big but not as big. Of course you could also choose SQL Server Compact edition.
I know the language. I've read a book. - _Madmatt
|
|
|
|
|
hi, friends
i wrote a code in c#.net and it's ok.
but i have a problem which is running slow
i hope thare is some suggestions
my code is folow
static void calis(int rer, int dizin)
{
while (it < iterasyon && mmse <= 0.00001)
{
mmse = 0;
mae = 0;
for (int nf = 0; nf < orneksay; nf++)
{
mmse += hesaplas(ndata, nf);
trains(nf);
}//nf
mmse = 0.5 * (mmse / (orneksay * nron));
if (it % 100 == 0)
{
yazs.WriteLine(mmse.ToString());
yazs.Flush();
}
it++;
}//it
dosyas.Close();
yazss.WriteLine(rer.ToString() + " " + mmse.ToString() + " " + it.ToString());
yazss.Flush();
dosyass.Close();
}
}
i call calis function and i see cpu usage %25
mey it improve its performs ?
can you help me?
regads.
modified on Thursday, April 1, 2010 2:53 AM
|
|
|
|
|
Please edit your original post, add PRE tags around the code so it gets all formatted and readable, and check some of it, I don't think while (it < iterasyon mmse <= 0.00001) could ever compile.
|
|
|
|
|
Your code is very confusing. As Luc suggested, I wonder if it would compile.
karayel_kara wrote: while (it < iterasyon && mmse <= 0.00001)
{
mmse = 0;
mae = 0;
for (int nf = 0; nf < orneksay; nf++)
{
mmse += hesaplas(ndata, nf);
trains(nf);
}//nf
I see the delay happening in this block. But we cannot help you till the time we don't know the initial value of mmse and what does hesaplas(ndata, nf) do?
Also, what is the value of orneksay?
There are so many loopholes here.
Suggestion:
Add two int counters. one in while loop and one in for loop just to notice how many times does this loop run. If this number is too high, you should probably consider ways to reduce them.
|
|
|
|