2016-07-26 18 views
-1

Ich habe einen Java-Code, der als Teil des Codes eine sehr große Matrix behandelt (1 Million mal 4 Millionen) und es dauert mehrere Stunden zu laufen, bevor es abstürzt!Welcher ist eine effizientere Möglichkeit, den Fortschritt eines langen laufenden Codes zu überwachen? auf dem Bildschirm drucken oder in eine Textdatei einloggen?

Ich möchte den Fortschritt des Codes überwachen, also wissen, wenn es nicht genügend Arbeitsspeicher und stürzt ab, welcher Prozentsatz der Matrix bereits verarbeitet wurde.

Ich denke daran, einen Befehl hinzuzufügen, um auf dem Bildschirm einen Counter (relativ zur Hauptoperationsschleife) alle 1000 Iterationen zu drucken. oder den Zähler in einer Textdatei protokollieren.

Ist das eine gute Idee? Oder verlangsamt es meinen ohnehin langsamen Code noch? Immerhin füge ich eine Zustandsüberprüfung (Überprüfung der 1000. Iteration) und Dateischreiboperation hinzu.

Jede Standardlösung in Java?

Wenn es keine Standardmethode oder -funktion zur Überwachung des Fortschritts gibt, die effizienter wäre, indem ich mein eigenes Protokoll in eine Datei schreibe oder auf dem Bildschirm drucke?

Bonus Frage: was ist mit Python? Jede interne oder Standard-Bibliothek dafür?

dank

+0

Dies ist extrem breit/vage. Die grundlegende Protokollierung ist nicht sehr zeit- oder prozessorintensiv. Versuche und finde es heraus. – tnw

Antwort

1

Ohne einen Zusammenhang zu dem, was dieser Code tut, mein Rat wäre, dass Sie eine if Bedingungsprüfung für jede 1000 th Iteration platzieren konnten, dann tut etwas (print-Anweisung, Berechnung , auszugeben, um zu loggen, zu überprüfen oder was hast du). Diese if Zustand des auf die Leistung auswirken ist extrem unbedeutend, es sei denn, im Inneren des Körpers des if Zustand eine Art teuer Berechnung durchführt (Modul Ausdruck ist nicht eine teure Berechnung für Computer!).

Python-Code:

for i in range(100000): # Loop symbolizing your code. 
    if i%1000 == 0: # Every 1000th iteration do something. 
     print "Progress" # Do something. 

Dass gesagt wird, es sei denn Sie gehen auf stdout zu starren für ein paar Stunden in Echtzeit; oder Scrollen durch die (was könnte sehr groß sein) stdout log dies scheint nicht die effizienteste Idee. Ich würde Ihnen empfehlen, einen Fehlerbericht für dieses Programm (Funktion?) Zu schreiben, während Sie während der Laufzeit Metadaten sammeln, um diesen Bericht zu erstellen, und Unit-Testing vorschlagen, falls Sie es nicht schon sind.