26

Znaczna część kodu zwolnienia C# jest zbudowana z wyłączoną opcją "Optymalizacja kodu". Sądzę, że pozwala to na łatwiejsze debugowanie kodu zbudowanego w trybie Release.Korzyści z opcji "Optymalizuj kod" w Visual Studio build

Biorąc pod uwagę fakt, że tworzymy dość proste oprogramowanie desktopowe, które łączy się z backendami Web Services (tzn. Nie jest to aplikacja wymagająca szczególnej liczby procesorów), a co jeśli można spodziewać się jakiegokolwiek wyniku wydajności?

Czy jakaś konkretna platforma może mieć gorszy wpływ? Na przykład. wieloprocesorowy/64-bitowy.

+0

Widziałem ten bieg błędem w _lot_ w starszych sklepach, które wciąż mają kulturę C/C++, ponieważ starają się przenieść na nowsze technologie. –

+0

@Greg D - Interesujące, pomyślałbym, że kultura C++ preferowałaby optymalizację - czy też nie to miałeś na myśli? –

+1

@gt: Kultura C++, w której najczęściej się spotykam, aby preferować optymalizację i "szybki kod", ale większość takich roszczeń opiera się na przesądach i irracjonalnym lęku przed czymkolwiek nowym lub innym. Nie przeczę, że kultura, o której mówię, jest dysfunkcyjna, ale myślę, że jest ona szeroko rozpowszechniona również poza tym sklepem.Liczba osób, które, pomimo wszelkich dowodów przeciwnych, twierdzą, że ich kod C++ ma lepsze cechy charakterystyczne dla jakiegoś rozsądnie napisanego kodu C#, np. Jest zdumiewający. Słyszałem, że zbyt często "będę zarządzać własną pamięcią, dziękuję". –

Odpowiedz

13

Pełne informacje są dostępne pod numerem http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx.

W skrócie ...

W kodzie zarządzanym, drgań w czasie pracy robi prawie cały optymalizacji. Różnica w wygenerowanej IL od tej flagi jest dość mała.

+5

Nie jestem pewien, dlaczego ten cytat jest ważny. Optymalizacja JITtera zależy od flagi, nawet jeśli wygenerowany il nie jest, więc flaga będzie miała wpływ na wydajność. Pierwotne pytanie dotyczyło wielkości tej różnicy. – phoog

2

Optymalizacje wykonane przez kompilator są dość niskie i nie powinny wpływać na komfort użytkowników.

Aby zoptymalizować optymalizację aplikacji, należy po prostu utworzyć profil niezoptymalizowanej i zoptymalizowanej wersji oraz porównać wyniki.

+0

Zauważyłem, że debuggery pomijają linie, gdy są obecne. To w VS 2013 i 15 przy okazji! Czasami po prostu wyłączam go lokalnie w celu debugowania. – arviman

6

W rzeczywistości istnieje różnica, czasem dość znacząca. Co naprawdę może mieć wpływ na wydajność (jak to jest coś, co JIT nie w pełni zadbać o):

  • Niepotrzebne zmienne lokalne (czyli większe ramki stosu dla każdego wywołania)
  • zbyt ogólne instrukcje warunkowe, JIT przekłada w dość prosty sposób.
  • Niepotrzebne rozgałęzienie (również nie jest dobrze obsługiwany przez JIT - mimo wszystko, nie ma zbyt wiele czasu, aby zrobić wszystkie inteligentne optymalizacje)

    Tak więc, jeśli robisz coś liczbową - włącz optymalizację . W przeciwnym razie nie zobaczysz żadnej różnicy.

26

Jesteś jedyną osobą, która może odpowiedzieć na pytanie "Skuteczność". Wypróbuj to w obie strony, zmierz wydajność i zobacz, co się stanie. Trafienie może być ogromne lub może być nieistotne; nikt, kto to czyta, nie wie, czy "ogromny" dla ciebie oznacza jeden mikrosekundę czy dwadzieścia minut.

Jeśli jesteś zainteresowany tym, co optymalizacje wykonywane są przez kompilator C# - zamiast jitter - gdy przełącznik znajduje się na optymalizacji, zobacz:

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

Powiązane problemy