C# Ende eines Arrays erkennen
Geizhals » Forum » Programmierung » C# Ende eines Arrays erkennen (76 Beiträge, 730 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
..
Re(2): C# Ende eines Arrays erkennen
03.03.2010, 23:31:50
Das sehe ich nicht so. Ein Exception kostet richtig Performance in .NET

Habs mal kurz getestet:
Variante eins dauerte in meiner VM 4224ms, Variante zwei 29 (!), Variante 3 mit ForEach etwa 35 ms.

var s = new String[] { "Hello", "World", "Test", "Sample" };

            Console.ReadLine();

            var sw = Stopwatch.StartNew();
            for (int i = 0; i < 100000; i++)
            {
                int x = 0;
                try
                {
                    do
                    {
                        s[x].Contains("Hello");
                        x++;
                    } while (true);
                }
                catch (Exception)
                {
                }
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);

            sw = Stopwatch.StartNew();
            for (int i = 0; i < 100000; i++)
            {
                for (int x = 0; x < s.Length - 1; x++)
                {
                    s[x].Contains("Hello");
                }
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);

sw = Stopwatch.StartNew();
            for (int i = 0; i < 100000; i++)
            {
                foreach (var x in s)
                {
                    x.Contains("Hello");
                }
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);

Undying

03.03.2010, 23:33 Uhr - Editiert von Undying, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.......
Re(7): C# Ende eines Arrays erkennen
04.03.2010, 00:25:24
Selten soviel mist gelesen. GarbageCollection läuft erst nach den
Schleifendurchgängen. Hier wird viel zu wenig allokiert und CPU Last ist zu
hoch.

Ohne dir wirklich die Garbage Collection anzuschaun kannst du absolut keine Aussage dazu treffen.
Hohe CPU Last hat nur minimalen Einfluss auf die Garbage Collection. Gerade wenn du z.B. in eine stop-the-world GC läufst (ohne dass ich jetzt weiß ob/wie das .NET macht) hat die Prozessorlast mal gar nix zu sagen.

und generell sind optimierungen NCIHT schlecht.

Hab ich nirgendwo behauptet und ist damit kein Argument.

0 passierender Index

var s = new String[] { "Hello", "World", "Test", "Sample" };
...
for (int x = 0; x < s.Length - 1; x++)
{
s[x].Contains("Hello");
}
Length == 4
d.h. dein for müsste 0-3 druchlaufen. Da du aber x < s.Length-1 schreibst machst du nur 0-2.





Rat was IEnumerator Interface definiert und was For Each macht.

So what? Das behandelt keinen einzigen meiner Einwände. Und wenn du schon klug*PIEP*en willst, hier mal ein gutes Beispiel wie man sich selber an der Nase herumführen kann: http://diditwith.net/2006/10/05/PerformanceOfForeachVsListForEach.aspx

Und nur der Vollständigkeit halber, ein Artikel zur GC in .NET: http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=786

Und jetzt sag mir dass du immer noch glaubst exakt behaupten zu können, wann die GC bei deinem Programm läuft?

Last but not least ein kurzer Artikel der sich mit Exceptions in micro benchmarks beschäftigt: http://blogs.msdn.com/ricom/archive/2006/09/25/771142.aspx

04.03.2010, 00:37 Uhr - Editiert von peter_neugartner, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung