Ich bemerkte dass eine Formelimplementierung goto verwendet, und das machte mich frage mich: Ist goto langsamer als andere Flow-Control-Konstrukte?
goto
ist nicht langsamer als jeder andere Flusskontrollmechanismus. Es wird, wie die meisten Flusskontrollmechanismen, in eine br.s
(oder eine ä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
innerhalb von verschachtelten Schleifen verwendet werden. Betrachten Sie den folgenden Code.
bool condition = false;
for (int i = 0; i < BigNumber; i++)
{
for (int j = 0; j < i; j++)
{
for (int k = 0; k < j; k++)
{
condition = Evaluate(i, j, k);
if (condition)
{
// break out of everything
}
}
}
}
Es gibt verschiedene Möglichkeiten, wie Sie aus der ganzen Sache ausbrechen könnten. Hier ist eine Methode.
bool condition = false;
for (int i = 0; i < BigNumber; i++)
{
for (int j = 0; j < i; j++)
{
for (int k = 0; k < j; k++)
{
condition = Evaluate(i, j, k);
if (condition) break;
}
if (condition) break;
}
if (condition) break;
}
Das Problem ist, dass jede Schleife die condition
Flag überprüfen muss. Wir könnten dies mit einem goto
umgestalten, um es etwas effizienter und etwas eleganter zu machen.
for (int i = 0; i < BigNumber; i++)
{
for (int j = 0; j < i; j++)
{
for (int k = 0; k < j; k++)
{
if (Evaluate(i, j, k)) goto BAILOUT;
}
}
}
BAILOUT:
bitte tun Sie sich einen Gefallen und verwenden Sie nicht in C#! – MUG4N
@ MUG4N Es ist nichts falsch mit goto's ist, wie Sie sie verwenden, die sie böse macht – GETah
@GETah Und sie werden so sehr selten verantwortungsvoll verwendet, und es gibt sehr wenig Wert bei der Verwendung von ihnen über die Alternativen, also warum die Risiken eingehen? – Servy