Czy występuje różnica wydajności między metodą instancji a metodą rozszerzenia?Metoda przedłużenia wydajności a metoda instancji
Odpowiedz
nie zapomnij metody rozszerzenie są tylko statyczne wywołania metod owinięte cukru składniowej. Więc co tak naprawdę pytaniem jest
Czy istnieje różnica wydajności pomiędzy statycznymi i instancji metod
Odpowiedź brzmi: tak i istnieją różne artykuły dostępne na ten temat
Niektóre linki
Miałem nadzieję, że zamierzasz dodać kilka cytatów do tych artykułów, ponieważ jeszcze ich nie znalazłem. Być może umieszczam niewłaściwe terminy w Google. –
@Colin też :). Domyślam się, że nie trafiłem, by przesłać ostatni raz. Wypróbuj google dla "wydajności wywołania metody CLR" Większość artykułów przyjmuje ogólne podejście, ale omawia różnice między instancjami a statycznymi różnicami. – JaredPar
Dzięki - Wygląda na dobrą lekturę ... Zaraz wracam :) –
Wątpię, by wystąpiła jakakolwiek różnica w wydajności, ponieważ jest to cukier syntaktyczny. Kompilator po prostu kompiluje go tak, jak każde inne wywołanie metody, z wyjątkiem tego, że jest to metoda statyczna w innej klasie.
Niektóre więcej szczegółów z mojego bloga o cukier składniowej: http://colinmackay.co.uk/2007/06/18/method-extensions/
-1 W swoim blogu porównujesz metodę statyczną z metodą statyczną. To różni się od metody instancji ... –
Ten wpis na blogu został napisany ponad dwa lata temu, a jego celem nie była odpowiedź na to dokładne pytanie.Moje włączenie polegało na wykazaniu, że Metody Rozszerzeń są cukrem syntaktycznym, pokazując leżącą u podstaw IL i sposób działania metod rozszerzenia. Ale, dziękuję za głosowanie w dół! –
Występuje niewielka różnica w wydajności, ze względu na liczbę argumentów przekazywanych do metody. Na przykład, spójrz na następujących klas:
public class MyClassInstance
{
public int MyProperty { get; set; }
public MyClassInstance(int prop)
{
MyProperty = prop;
}
public void IncrementInstance()
{
MyProperty++;
}
}
public static class MyClassStatic
{
public static void IncrementStatic(this MyClassInstance i)
{
i.MyProperty++;
}
}
uruchomiony następujący kod:
DateTime d = DateTime.Now;
MyClassInstance i = new MyClassInstance(0);
for (int x = 0; x < 10000000; x++)
{
i.IncrementInstance();
}
TimeSpan td = d - DateTime.Now;
DateTime e = DateTime.Now;
for (int x = 0; x < 10000000; x++)
{
i.IncrementStatic();
}
TimeSpan te = e - DateTime.Now;
td = .2499 sek
Te = .2655 sek
uwagi na fakt, że metoda instancji nie musi przekazywać żadnych argumentów.
heres nieco przestarzały, ale dobry artykuł na temat wydajności
Co dzieje się z odwołaniem "this" w wywołaniu metody instancji? Gdzie to idzie? Jak to się dzieje? Metoda musi ją skądś zdobyć? –
zasadniczo zarówno IncrementInstance, jak i IncrementStatic wywołują metodę Set dla właściwości MyProperty. Metoda instancji odnosi się bezpośrednio do pamięci instancji, natomiast metoda statyczna odnosi się do instancji przekazanej jako argument. –
Co ciekawe, wziąłem twój kod i uruchomiłem go na moim komputerze. Kiedy używam tej samej liczby iteracji, kiedy liczby przeskakują jeden drugiego. Czasami metody metody wygrywają, czasami metody rozszerzenia. Uważam, że timer nie jest wystarczająco dobry, więc ustawiam iteracje na ponad 2 miliardy (int.MaxValue), a teraz uzyskuję dość spójne wyniki. Wykonanie iteracji za pomocą metody instancji zajmuje 46 nanosekund, a jej powtórzenie za pomocą metody rozszerzenia zajmuje 45 nanosekund. Nie sądzę, że zamierzam optymalizować cokolwiek tak czy inaczej w oparciu o różnicę nanosekundy. –
To nie ma żadnej znaczącej różnicy. Zobacz this article.
I zweryfikowaniu wyników testu i zrobił kolejny test gdzie wariant statyczny miał parametr typu Sample
. Wszystkie one trwały 11495ms (+/- 4ms) w moim systemie za 2,1 miliarda połączeń. Jak mówi artykuł, nie powinieneś się o to martwić.
Większość przykładów i testów, tu nie są ważne, ponieważ pozwalają one na metodzie inline. Szczególnie łatwe dla kompilatora, jeśli metoda jest pusta;)
(ciekawe, że test był wolniejszy w moim systemie niż ten w artykule .. nie jest to dokładnie powolne, ale może to być spowodowane 64-bitowym systemem operacyjnym)
Ten link już nie działa ... – takrl
Sprawdzam z autorem, czy jest gdzie indziej, gdzie umieścił go online. W międzyczasie możesz przeczytać ją na http://web.archive.org/web/20090624234442/http://gregbeech.com/blogs/tech/archive/2007/01/11/static-vs-instance-method -performance.aspx – Thorarin
Dobra, dziękuję, sprawdziłem też jego bieżący blog, ale już go tam nie było. – takrl
- 1. XSLT wezwanie java metoda instancji
- 2. Metoda przedłużenia. Typu lub obszaru nazw „T” nie można znaleźć
- 3. "Uncurrying" metoda instancji w .NET
- 4. Fabryczna metoda tworzenia instancji singleton
- 5. Kanoniczna metoda pomiaru wydajności uruchamiania aplikacji iOS?
- 6. python resettable metoda instancji memoization decorator
- 7. ActionMailer metoda instancji używany jak metody klasy
- 8. Java: klon naruszenie metoda
- 9. Budowanie obiektu - metoda statycznego konstruktora a klasa konstruktora a metoda rozszerzenia
- 10. Interfejs prywatny a metoda prywatna - cel c
- 11. BŁĄD Metoda statyczna wymaga wystąpienia zerowego, metoda niestatyczna wymaga niezerowej instancji
- 12. Metoda klasy i metoda instancji o tej samej nazwie w Objective-C
- 13. scala metoda rodzajowa nadrzędnymi
- 14. Przypisywanie metoda moduł do zmiennej klasy lub zmiennej instancji
- 15. Metoda rozwiązywania błędów: "nie można utworzyć instancji klasy abstrakcyjnej"
- 16. Niezdefiniowany metoda instancji "respond_to" w szynach 5 API kontrolera
- 17. to_param warunkowy metoda
- 18. fabryka metoda wzornictwo
- 19. Metoda wywołania z konstruktora
- 20. LINQ do podmiotów nie rozpoznaje metoda „System.DateTime AddSeconds (podwójne)” metoda, a metoda ta nie może być tłumaczone na
- 21. Metoda optymalizacji równań()
- 22. Metoda ExecuteScript
- 23. Metoda wyboru danych Metoda ORDER BY klauzula
- 24. Metoda abstrakcyjna PHP kontra metoda domyślna
- 25. Metoda łańcucha grzbietowego/podkreślenia gdzie metoda
- 26. Metoda wywoływania instancji dla każdego obiektu w tablicy
- 27. Zmienna instancji java i metoda o tej samej nazwie
- 28. coffeescript: Wniosek klasa metoda od metody instancji bez hardcoding
- 29. Metoda SQLiteDatabase.query
- 30. Meteor.http.call metoda
Napisz kod w obie strony. Wyjdź ze stopera. Wtedy będziesz wiedzieć. –