Ist die goto-Anweisung in c # langsam?

8

Ich arbeite an einer C # .NET-Anwendung, die einige ziemlich komplexe wissenschaftliche Formeln für große Datenmengen verwendet (durchschnittlich 10 Millionen Datenpunkte). Ein Teil von dem, was ich tue, erfordert, die Formelimplementierungen so gut wie möglich zu optimieren.

Ich habe bemerkt, dass eine Formelimplementierung goto verwendet, und das hat mich wundern lassen: Ist das langsamer als andere Flusskontrollkonstrukte?

    
kevin628 19.04.2012, 17:31
quelle

4 Antworten

11
  

ist langsamer als andere Flusskontrollkonstrukte?

Nein. Alle anderen Flusssteuerungskonstrukte sind im Grunde trotzdem goto .

    
jason 19.04.2012, 17:32
quelle
4
___ answer10233541 ___
  

ist langsamer als andere Flusskontrollkonstrukte?

Nein. Alle anderen Flusssteuerungskonstrukte sind im Grunde trotzdem goto .

    
___ qstnhdr ___ Ist die goto-Anweisung in c # langsam? ___ answer10284051 ___
  

Ich habe bemerkt, dass eine Formelimplementierung goto verwendet, und das hat mich dazu gebracht   frage mich: Ist das langsamer als andere Flusskontrollkonstrukte?

goto ist nicht langsamer als jeder andere Flusskontrollmechanismus. Es wird, wie die meisten Flusskontrollmechanismen, in eine %code% (oder ähnliche) MSIL-Anweisung kompiliert. Es gibt jedoch Situationen, in denen %code% etwas schneller sein kann. Sie sind meist auf Situationen beschränkt, in denen %code% und %code% in verschachtelten Schleifen verwendet werden. Betrachten Sie den folgenden Code.

%Vor%

Es gibt verschiedene Möglichkeiten, wie du aus der ganzen Sache ausbrechen kannst. Hier ist eine Methode.

%Vor%

Das Problem ist, dass jede Schleife das %code% Flag überprüfen muss. Wir könnten dies mit einem %code% umgestalten, um es etwas effizienter und etwas eleganter zu machen.

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ antwort10233554 ___

Der Befehl %code% in C # ist nicht langsamer als jedes andere Kontrollfluss-Konstrukt. Tatsächlich wird die überwiegende Mehrheit der Kontrollflusskonstrukte (wenn, während, für usw.) in %code% implementiert.

Zum Beispiel:

%Vor%

Wird im Wesentlichen auf die folgenden Punkte kompiliert:

%Vor%     
___ answer10233556 ___

%code% s und %code% werden intern vom Compiler in %code% s übersetzt, so dass sie nicht schneller sind als %code% s

    
___ tag123goto ___ Bei der imperativen Programmierung ist eine Anweisung "Gehe zu" eine unbedingte Sprunganweisung, die den Fluss der Steuerung an den Punkt des Programms ändert, auf das durch die Anweisung "Gehe zu" verwiesen wird. ___ qstntxt ___

Ich arbeite an einer C # .NET-Anwendung, die einige ziemlich komplexe wissenschaftliche Formeln für große Datenmengen verwendet (durchschnittlich 10 Millionen Datenpunkte). Ein Teil von dem, was ich tue, erfordert, die Formelimplementierungen so gut wie möglich zu optimieren.

Ich habe bemerkt, dass eine Formelimplementierung goto verwendet, und das hat mich wundern lassen: Ist das langsamer als andere Flusskontrollkonstrukte?

    
___
JaredPar 19.04.2012 17:32
quelle
4
  

Ich habe bemerkt, dass eine Formelimplementierung goto verwendet, und das hat mich dazu gebracht   frage mich: Ist das langsamer als andere Flusskontrollkonstrukte?

goto ist nicht langsamer als jeder andere Flusskontrollmechanismus. Es wird, wie die meisten Flusskontrollmechanismen, in eine br.s (oder ähnliche) MSIL-Anweisung kompiliert. Es gibt jedoch Situationen, in denen goto etwas schneller sein kann. Sie sind meist auf Situationen beschränkt, in denen break und continue in verschachtelten Schleifen verwendet werden. Betrachten Sie den folgenden Code.

%Vor%

Es gibt verschiedene Möglichkeiten, wie du aus der ganzen Sache ausbrechen kannst. Hier ist eine Methode.

%Vor%

Das Problem ist, dass jede Schleife das condition Flag überprüfen muss. Wir könnten dies mit einem goto umgestalten, um es etwas effizienter und etwas eleganter zu machen.

%Vor%     
Brian Gideon 23.04.2012 16:01
quelle
1

if s und for werden intern vom Compiler in goto s übersetzt, so dass sie nicht schneller sind als goto s

    
GETah 19.04.2012 17:32
quelle

Tags und Links