Programm Laggt Extrem auf Win8 aber nicht auf Ein XP waurm ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobo2040

Betreff: Programm Laggt Extrem auf Win8 aber nicht auf Ein XP waurm ?

BeitragFr, Jul 19, 2013 1:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ^^
Ich habe nen Programm ist noch nix großes oder so (>1mb) und es läuft auf meinem relativ schlechten PC einwandfrei und ohne laggs ok manchmal stürtzt es ab ... aber das liegt an meinem PC Very Happy
Aber ein Kumpel von mir hat nen guten Win8 PC bei ihm Stürzt das Spiel zwar nicht aber aber es laggt extrem stark... und auf meinem WinXP PC zieht es zwar nicht viel ram ~10-20mb aber dafür bei 2,8Ghz im schnitt 70%
CPU leistung .... ich habe so oft es möglich war delay benutzt ... gibts da noch andere wege das Programm schneller und Ressourcensparender zu machen ? Und ist das normal das Programme auf Win8 laggen die mit BlitzPlus Compiled sind ?
 

PhillipK

BeitragFr, Jul 19, 2013 1:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Viel helfen kann ich dir leider nicht.
Zum einen Theorie:
BlitzPlus sowie BB verwenden, meines wissens nach, noch irgendwas um DX7 rum. Das ist schon sowas von alt, das es mich wundern würde, wenn W8 da noch ohne mucken mit arbeitet - welcher teenie ärgert sich nicht über irgendwen älteres? Smile
Dh es kann durchaus sein, das du ohne komplexe workarruonds da nichts machen kannst.

Zum anderen kann es sein, das es sehr wohl an deinem programmaufbau liegt. die 2,8 Ghz mit 70% last machen mich stutzig.

In blitzmax zumindest ist es so, das Delay sowas ist wie..
BlitzMax: [AUSKLAPPEN]
Delay(100)
Function Delay(dauer:Int)
Local time:Int = MilliSecs() + dauer
While True
If time < MilliSecs() Then Return
Wend
End Function


nur ums grob mit pseudocode zu veranschaulichen:
Obwohl man das programm wissentlich ausbremst, kriegt das system keine mitteilung, das der prozessor noch was anderes bis zum nächsten takt machen darf -> 100% auslastung.

du solltest dir mal timer anschauen:
Zeit und Zufall
und dort ganz speziell:
CreateTimer sowie
Waittimer

Allerdings:
Wie die hilfe schon sagt, arbeitet das ganze mit Frequenzen, genauer Taktung pro sekunde.
Ein Timer mit 60 frequenz feuert also 60x die sekunde sein event - oder anders gesagt: ein Timer mit 60 freq. gibt dir ein maximum von 60 FPS (falls fps aus spielen eher bekannt ist)


Du solltest umbedingt versuchen, Delay zu vermeiden, wenn diese wie in blitzmax arbeiten (wovon ich stark ausgehe), stattdessen kann ein einzelnes Waittimer() vor dem ende der hauptschleife wahre wunder bewirken.
Beinahe jedes programm, was nur ein bisschen was darstellt, braucht so <1% cpu auslastung.
Umkehrschluss: Es bleibt mehr ressourcen für andere programme übrig, was evtl auch bei dem W8 problem helfen kann. aber nur der teufel weiß wie w8 funktioniert - bzw ich jedenfalls nicht.

Mein rat: Bottlenecks (flaschenhälse) in der programmierung suchen und mal einen krassen performanceboost einbauen und erneut probieren.
Funktioniert das nicht, schlachte dein programm mal aus (wegfindungen etc, alles raus. nurn bisschen grafik darstellen!) und tests erneut auf W8, um den DX7 part mal auszutesten.
 

Bobo2040

BeitragFr, Jul 19, 2013 2:11
Antworten mit Zitat
Benutzer-Profile anzeigen
okay danke erstmal das mit dem waittimer probier ich morgen direkt aus *_* hoffe dann klappts besser Very Happy
und was meinst du mit ausschlachten ? win8 ? das geht glaube ich nicht weil er das nicht machen würde... und der pc ist noch recht neu ca. 5monate
ich schreibe nachher oder morgen mal den mircosoft support an vllt. haben die eine lösung Very Happy

DAK

BeitragFr, Jul 19, 2013 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem Ausschlachten war dein Programm gemeint. Die Idee ist, heraus zu finden, was in deinem Programm so ewig lang braucht.

Dazu kommentierst du einfach einen Teil nach dem Anderen aus, und schaust, ab wo das Programm schlagartig schneller läuft. Dann hast du den Code-Teil, der Ärger verursacht.

Dazu kann auch sowas helfen:

BlitzBasic: [AUSKLAPPEN]

ms = MilliSecs()
;Dein zu testender Code
Print ("Codeabschnitt 1 hat "+(MilliSecs()-ms)+" ms gebraucht")


Auf die Art testest du jeden Teil des Codes und kannst somit sehen, was wie viel braucht. Insgesamt sollte ein Hauptschleifendurchlauf nicht mehr als 15-20 ms brauchen
Gewinner der 6. und der 68. BlitzCodeCompo
 

PhillipK

BeitragFr, Jul 19, 2013 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Jap genau.
Ausschlachten meint dein Programm:
Lege eine sicherheitskopie an und werf erstmal alles, was unnütz ist, raus.
Ich würde mein hauptaugenmerk erstmal darauf legen, pur die grafik zu testen.
Je nach art des programmes können es tausende sachen sein:
- BB kann unter W8 einfach nichtmehr richtig dargestellt werden
- Bei einer Tilemap / isomap wird weit mehr gezeichnet als tatsächlich sichtbar ist.
- Es gibt diverse schnickschnack sachen, wie rauch und hunderete Grab images.

Die unterschiede zwischen W8 und WinXP kann ich mir so erklären, das Dx7 unter W8 nurnoch emuliert wird. (vermutung, unbestätigte aussage)
Das würde bedeuten, das du eine absolute minimum-form des Renderns brauchst und viel mit der CPU vorprüfst Smile
 

Bobo2040

BeitragFr, Jul 19, 2013 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Very Happy
Hab übrigends eben dem Microsoft support geschrieben Very Happy Ich sag dann mal was bei rauskommt...
Und ausschlachten kann ich das grad nicht also auschlachten ja aber nicht auf win8 testen weil mein kumpel nicht da ist... der ist grad beim Paintball Spielen *_*

DAK

BeitragFr, Jul 19, 2013 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal geschaut was Sache ist: DirectX 7 wird nicht emuliert, sondern gewrappt, will heißen, dass DirectX 7-Befehle quasi auf äquivalente Befehle in dem jeweils installierten DirectX gemappt werden.
Das sollte generell kein Problem sein, kann aber mit speziellen Befehlen doch zu Problemen führen, da das Wrapping wohl anscheinend nicht immer so perfekt arbeitet. Soweit ich mitgekriegt hab, ist z.B. ImagesCollide ein so ein Kandidat.

Ich tippe immer noch viel eher auf unsauberen Code als auf böses Windows 8, vor allem, wenn man bedenkt, wie es (nicht böse gemeint) um Bobos Programmierfähigkeiten steht. (Wirklich nicht böse gemeint. Jeder hat mal angefangen.)
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragFr, Jul 19, 2013 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß das ich nen Bob bin Very Happy
Ich hab vor 4 Tagen das erste mal von Blitzbasic gehört... Very Happy
Und noch nicht großartig viel gemacht ^^
Ich hab meinem Code schon überarbeitet teste ihn Morgen oder Heute bei nem Kumpel aufm PC Very Happy
Microsoft Support hat noch nix geschriebn Very Happy

DAK

BeitragFr, Jul 19, 2013 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt, das hab ich nicht böse gemeint, ist ja klar, dass du nach vier Tagen noch kein WoW raus schmeißt Wink

Auch wundert es mich nicht, dass Microsoft dir nicht geantwortet hat. Die tun das nur wenn es ihnen daran liegt, also bei bekannten Entwicklern oder wirklich wichtigen Problemen. Dass Dx7-Programme nicht mehr so gut auf Win8 rennt, das ist denen kaum mehr wichtig. Die letzte Version von Dx7 ist im September 2000 heraus gekommen, also jetzt schon fast 13 Jahre her. Support dafür ist auch schon seit einer guten Weile ausgelaufen.

Es ist gut, dass du so kräftig dabei bist. Nimm's hald mal ein wenig ruhiger Wink
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragFr, Jul 19, 2013 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo Very Happy
Ich versuchs... aber den "traum" das Spiel zu verwirklichen habe ich schon seit knapp 6 Monaten ... habe mit C# Angefangen - Zu anspruchsvoll , dann Unity , Flash aber das war alles nix für mich Very Happy
Und dann jetzt halt BlitzPlus/Basic Very Happy
Findes relativ leicht zu erlernen nur ist die Fehler anzeige wenn es nen Syntax Fehler gibt nicht sehr hilfreich Very Happy
Ne zeilenangabe oder so wäre besser ^^ So wie in PHP oder so...

EDIT:
Habe jetzt mal die Geschwindigkeit getestet und bei beiden Codeabschnitten hats zwischen 0 und 1 ms geschwankt....
EDIT2:
Habes jetzt auch bei der Hauptschleife getestet da Schwankt es Zwischen 30-50ms also eindeutig zu viel....

Tankbuster

BeitragFr, Jul 19, 2013 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Direct Draw, (was du benutzt um die 2D Grafiken zu zeichnen) wird nurnoch emuliert. Und zwar langsam. (vorallem bei Windows 8)

Dagegen kannst du auch nicht viel tun, außer sparsam mit dem Zeichnen von Bildern, ect auf dem Bildschirm sein Wink

MFG
Twitter
Download Jewel Snake!
Windows|Android
 

Bobo2040

BeitragFr, Jul 19, 2013 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du bist lustig Very Happy
Gibts dazu nen Emulator für Win8 oder sowas ?
Weil ich mache das Spiel eig. nur für meinem Besten Freund, Guten Kumpel und mich...
Und mein Bester Freund hat Win8 und mein Guter Kumepl auch ^^
Hab übrigends mich WaitTimer
Das Script um ca. 15ms beschleunigt braucht jetzt nur noch 20-30 ms... ist mir aber immer noch zu langwsam .. wenn ich bedenke das da noch TCP angreifen NPC's mehrere Maps geben soll... gibts da noch ne möglichkeit das Script schneller zu machen ?
mfg

DAK

BeitragFr, Jul 19, 2013 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankbuster: Nein, es wird nicht emuliert. Emulatoren sind laut Wikipedia Soft- oder Hardware, die ganze Computer nachbilden. Dort wird z.B. WINE explizit aus den Emulatoren ausgenommen, da dabei nur die Softwareschnittstellen gewrappt werden. Ist also etwas anderes als ein Emulator.

DirectDraw wird genauso gewrappt. Befehle werden auf die nächstmöglichen Passenden umgemapt, oder falls das nicht möglich ist, durch andere quasi nachgebaut. So wird z.B. statt dem direkten Zugriff auf den Framebuffer ein direkter Zugriff auf ein Surface oder eine Textur gegeben, und diese dann auf den Framebuffer geladen.

Das ist kein Emulator, sondern eine Kompartiblitätsschicht oder ein Wrapper.

Es gibt dazu keinen Emulator auf Windows 8, weil was dabei passiert ist eben das, was ich beschrieben habe. Auf Windows 8 ist DirectX 11.1 oder 11.2 standardmäßig installiert. Beide von denen haben von sich aus kein DirectDraw mehr (das war das letzte Mal regulär in DirectX 6, und als depreciated in DirectX 7). Wenn dein Programm DirectDraw über DirectX 7 haben will, dann kriegt das das DirectX 11 mit, und wrappt die Befehle automatisch. Würde es das nicht tun, dann würde dein Programm auf DirectX 11/Windows 8 gar nicht laufen!

Das Wrappen kostet Rechenzeit, und zwar vor allem deswegen, weil Optimierungen, die in DirectDraw wirklich gut funktionieren, in DirectX 11 extrem langsam brauchen. Deswegen braucht der Grafikteil und nur der Grafikteil deines Programmes unter Windows 8 mehr Rechenzeit als unter Windows 2000. Windows 2000 ist nämlich die letzte Windows-Version, auf der DirectX 7 und damit DirectDraw direkt und ungewrappt verfügbar war.
Seit dem (also ab Windows XP / DirectX 8) ist DirectDraw nur noch über den Wrapper verfügbar.

So, jetzt mal alles von der Leber geschrieben, hoffe es hilft irgendwem.
Gewinner der 6. und der 68. BlitzCodeCompo
 

Bobo2040

BeitragSa, Jul 20, 2013 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja Very Happy
Aber ich habe Direct 9 Very Happy und WinXP und nen weitausschlechteren PC als er aber warum läufts dann bei mir ruckelfrei ?

Thunder

BeitragSa, Jul 20, 2013 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wäre z.B. auch möglich, dass bei ihm die Hardwarebeschleunigung für DirectDraw deaktiviert ist. Das könnte er Mal mithilfe von dxdiag.exe nachschauen. Zweites Tab (Anzeige).

Es geht manchmal nicht darum, wie alt eine Hardware/Software ist, sondern oft auch darum, ob sie für einander ausgelegt sind. Hardware wird meistens so optimiert, dass die Funktionen, die am meisten benützt werden, weniger Zeit in Anspruch nehmen - wenig genutzte Funktionen werden nicht optimiert und bleiben zurück (ob das bei Grafikkarten genauso ist, kann ich nicht wirklich sagen, aber für CPUs ist das richtig).

Eine Sache, die bei sowas immer interessant ist, ist, ob es im Vollbildmodus auch langsam ist. Kommt jetzt darauf an, was dein Programm ist und ob es bisher im Fenstermodus gearbeitet hat. Denn im Vollbildmodus kann nochmal Geschwindigkeit dazukommen.

Midimaster

BeitragSa, Jul 20, 2013 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die Geschwindigkeitprobleme zu finden benötigst Du mehr als eine Messstelle. Gemessen wird in der REPEAT/UNTIL Schleife:

BlitzBasic: [AUSKLAPPEN]
Repeat
Zeit%=MilliSecs()
blabla...
blabla...
DebugLog "1.Stelle=" + (MilliSecs()-Zeit)
blabla...
blabla....
DebugLog "2.Stelle=" + (MilliSecs()-Zeit)
blabla...
blabla....
DebugLog "3.Stelle=" + (MilliSecs()-Zeit)
Flip


Beginne zunächst mit 3 Stellen und dort wo kaum Unterschiede zur vorherigen Stelle sind (1-2msec) forscht Du nicht weiter. Dort wo große Unterschiede zur vorherigen Stelle sind (>10msec) fügst Du drei weitere DEBUGLOG ein. Und irgendwann hast Du die Problemstelle eingekreist.

Willst Du das ganze auch auf dem Rechner des Freundes testen machst Du es mit TEXT statt DEBUGLOG. Dann kann er die Ergebnisse auch als Laie melden:

BlitzBasic: [AUSKLAPPEN]
Repeat
Zeit%=MilliSecs()
blabla...
blabla...
Text "1.Stelle=" + (MilliSecs()-Zeit) , 0 , 30
blabla...
blabla....
Text "2.Stelle=" + (MilliSecs()-Zeit) , 0 , 60
blabla...
blabla....
Text "3.Stelle=" + (MilliSecs()-Zeit) , 0 , 90
Flip


Alles andere ist "Stochern im trüben Teich"...


99% aller Probleme verursacht der Programmierer, nicht der Rechner oder das System!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Bobo2040

BeitragSa, Jul 20, 2013 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay gut Very Happy
Im vollbildmodus hab ichs noch nicht getestestet werd ich aber heute noch tun Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group