Print - Leistungsfrage

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Print - Leistungsfrage

BeitragDi, Jul 14, 2020 3:45
Antworten mit Zitat
Benutzer-Profile anzeigen
huhu leute nun habe ich eine echt blutige anfängerfrage.

jeder kennt den befehl Print "Hallo Welt" meine frage ist wenn ich nun ein programm oder spiel habe und mir selbst ein debugger basteln möchte dort einige prints drin sind kostet es mich leistung im relase modus?

wie ich mir es vorstelle. wenn man unendlich etwas in einer tlist setzt und diese immer komplett durchgeht verlangsamt sich ja das programm was irgendwo logisch ist. ist das mit print ähnlich?

ich wollte mir nämlich ein "debugger" für mein eigenen client schreiben, soll heißen im client sind prints erhalten. mit einem zweit programm kann ich diese so abfragen

Process1 ist natürlich das mein programm bzw der client
Code: [AUSKLAPPEN]
CreateTimer(60)
Repeat
   Local status:Int = ProcessStatus(Process1)
   If status = 1 Then
      
       Local Was:String = ReadLine(Process1.Pipe)
      If Was <> "" Then
         Print Was
      End If
   Else
       End
   EndIf
   
Forever


wenn man nun den "debugger startet liest er alle prints voll aus. ich frag mich nur was macht das mit dem main programm, speicher leegs? verlangsamung?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragFr, Jul 17, 2020 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kostet dich natürlich Zeit. Von einer UNIX-Sichtweise macht es keinen Unterschied, ob du auf die Konsole schreibst oder in eine Datei. In beiden Fällen passiert ein Syscall und der Kernel kopiert den Text in die Output-Datei. Wenn der Output eine Pipe ist, die von einem anderen Thread gelesen wird, dann beeinflussen sich diese Threads gegenseitig. Gehen wir davon aus, dass dein Programm pro sekunde mehr printet, als dein Debugger lesen kann, wird die Pipe immer wieder voll werden, dann wird das Programm angehalten, bis der Debugger nachkommt.

Wie weit das ganze auf Windows umzulegen ist, weiß ich nicht. Jedenfalls denke ich, dass diese Art der Interprozesskommunikation relativ effizient ist (Alternativen sind z.B. Shared Memory und Sockets, wobei Shared Memory wahrscheinlich schneller und Sockets langsamer sind). Trotzdem wird es ein praktisches Limit geben, wieviel du pro sekunde printen kannst.

Das ganze ist nicht vergleichbar mit dem Anwachsen einer TList, was deinen PC irgendwann unbenutzbar macht, wenn du die gelesenen Daten nicht alle im Debugger in eine TList speicherst ^^
Du solltest pro Print statement ein konstantes Penalty haben (bei konstanter Textgröße).
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Mathias-Kwiatkowski

BeitragFr, Jul 17, 2020 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für deine antwort, ich habe nun auch das so umgeschrieben das programm den print nur ausgibt wenn in den appargs vorkommt das er debuggen soll.
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragFr, Jul 17, 2020 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist eine gute Idee. Du hast natürlich trotzdem ein Penalty, weil du vor jedem Print-Befehl wahrscheinlich eine Variable checkst, aber das ist schon mal viel besser als ein Syscall.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DAK

BeitragMi, Aug 05, 2020 11:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu muss man aber sagen, wenn dein Programm nicht primär aus Prints besteht, sollte das quasi nie dein Performance Bottleneck sein.

Wie gesagt, du hast nur eine konstante Penalty. Jedes Print kostet dich die gleiche Zeit, und die ist gering.

Unter hundert Zeilen pro Sekunde wirst du wahrscheinlich noch nicht mal im Taskmanager sehen.

Es gibt Orte, an denen sich das Optimieren mehr auszahlt.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group