2010-09-22 15 views
18

Nie jestem całkowicie pewien, co czytam w dokumentacji. Czy można zostawić kilka rozproszonych fragmentów kodu log.d, czy też powinienem je skomentować, aby nie wpłynęły na wydajność mojej aplikacji.Log.d i wpływ na wydajność

Dzięki,

jestem trochę zdezorientowany, bo jeśli czytasz o obiekcie dziennika (documentation) można zobaczyć poniżej:

„Kolejność pod względem gadatliwości, od najmniej do najbardziej jest bŁĄD, ostrzec INFO, DEBUG, VERBOSE. Pełne nigdy nie powinien zostać skompilowany do aplikacji wyjątkiem okresu rozwoju. dzienników debugowania są kompilowane w ale usuwane przy starcie. błąd, ostrzegawczych i informacyjnych dzienników są zawsze ".

Brzmiało prawie tak, jak można pozostawić tam komunikaty debugowania, ponieważ są one "rozebrane". W każdym razie, dzięki za odpowiedzi, skomentuję je, kiedy skończę. Nie tak jakbym potrzebował ich tam, gdy aplikacja zostanie ukończona.

Dzięki

+1

Oprócz wpływu na wydajność aplikacji, mogą utrudnić innym osobom debugowanie ich zawartości. Dziennik ma tylko 64 KB, więc za każdym razem, gdy dodajesz komunikat do dziennika, inna wiadomość zostanie zepchnięta z góry. – fadden

Odpowiedz

14

Rejestr ma wpływ na wydajność, dlatego zaleca się skomentować lub zalogować za pomocą instrukcji warunkowych.

Na przykład

public class MyActivity extends Activity { 
// Debugging 
private static final String TAG = "MyApp"; 
private static final boolean D = true; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(D) Log.e(TAG, "MyActivity.onCreate debug message"); 
} 

Następnie w trakcie publikowania wersja release wystarczy zmienić "D" do fałszywego

+3

Dlaczego nie ustawić debuggable = false, aby wyłączyć debugowanie w aplikacji: anticafe

+11

@ anticafe Bo jeśli na przykład dokonasz konkatenacji w logu, to nadal będzie działał (powodując niepotrzebne alokacje). Ustawienia 'debuggable = false' gwarantują tylko, że nie znajdą się w dzienniku. Metody będą nadal wywoływane. – yydl

+0

Jeszcze lepiej, użyj Proguard, aby usunąć wszystkie logi z kodu. –

3

Zdecydowanie je skomentuj. Łączą się szybko i mogą znacznie spowolnić Twoją aplikację, zwłaszcza jeśli masz je w pętlach.

8

Moje rozwiązanie:

+0

zdecydowanie najlepsze rozwiązanie IMHO - w ogóle nie zanieczyszcza kodu :) – manmal

+0

ale potem nie można ich ponownie włączyć – likejiujitsu

2

Po prostu użyj metod ochrony kodu.

if (Log.isLoggable(LOG_TAG, Log.DEBUG)) { 
Log.d(LOG_TAG, "Your log here"); 
} 
+0

Nawet ta kontrola ma wpływ na wydajność. Właśnie uruchomiłem Traceview i Log.isLoggable() zajmuje 5ms czasu procesora/Call i prawie 11ms Real Time/Call. –

+0

Masz rację. Ale znacznie lepiej niż zapisywanie informacji o logach na dysku. Poziom można konfigurować za pomocą konfiguracji serwera. – gconcon

+0

Jest zdecydowanie lepszy niż zapis na dysk, ale nie jest dobry, jeśli próbujesz renderować klatki z prędkością 60 klatek na sekundę. To zajmuje dobry kawałek z tego 16,7ms na klatkę. –

Powiązane problemy