Print - Leistungsfrage
Übersicht![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
![]() |
Mathias-KwiatkowskiBetreff: Print - Leistungsfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht
![](/themes/Standard/arrow.png)
![](/themes/Standard/arrow.png)
Powered by phpBB © 2001 - 2006, phpBB Group