Różnice wydajności między przeładowaniem a parametrami opcjonalnymi?
Nie, nie otrzymałem odpowiedzi ↑
Zastanawiam się, czy powinienem używać opcjonalnych parametrów w C #. Do tej pory zawsze byłem przeciążony metodami. Ale opcjonalne parametry są również miłe, czystsze i mniej kodu. I używam ich w innych językach, więc jestem też do nich przyzwyczajony. Czy jest coś, co przemawia przeciwko używaniu ich? Wydajność to dla mnie najważniejszy punkt. Czy spadnie?
Przykładowy kod:class Program
{
// overloading
private static void test1(string text1)
{
Console.WriteLine(text1 + " " + "world");
}
private static void test1(string text1, string text2)
{
Console.WriteLine(text1 + " " + text2);
}
// optional parameters
private static void test2(string text1, string text2 = "world")
{
Console.WriteLine(text1 + " " + text2);
}
static void Main(string[] args)
{
test1("hello");
test1("hello", "guest");
test2("hello"); // transforms to test2("hello", "world"); ?
test2("hello", "guest");
Console.ReadKey();
}
}
Zmierzyłem czas potrzebny na kilka milionów połączeń przeciążeniowych i opcjonalne wywołania parametrów.opcjonalne parametry z ciągami znaków: 18%wolniej (2 parametry, wydanie)opcjonalne parametry z intami: <1%szybciej (2 parametry, wydanie)(A może kompilatory optymalizują lubbędzie zoptymalizować te opcjonalne wywołania parametrów w przyszłości?)