Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
XNA-Performance (Performance halbiert sich, wenn die Darstellung etwas aufwändiger wird)
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

Themenstarter:

XNA-Performance (Performance halbiert sich, wenn die Darstellung etwas aufwändiger wird)

beantworten | zitieren | melden

Hallo!

Ich habe ein ganz komisches Verhalten, und zwar versuche ich mich gerade an einem Fahrenden Auto. Ich entwickel gerade an einem (schwachen) Notebook. Wenn ich das Auto + Hintergrund darstelle hab ich nur 30fps. Wenn ich aber das Auto einzelnd, oder nur den Hintergrund darstelle, hab ich 60fps. Woran kann das liegen? Meine Updatemethode ist schnell genug.

Gruß pdelvo
Attachments
private Nachricht | Beiträge des Benutzers
Expandable
myCSharp.de - Member



Dabei seit:
Beiträge: 42

beantworten | zitieren | melden

Liegt eventuell am VSync. Dein Laptop ist schnell genug, beide Objekte einzeln mit 60 FPS zu rendern. Sofern er aber beide rendern soll, reicht's vielleicht nur noch für 58 fps. Mit aktiviertem VSync werden daraus dann 30.
private Nachricht | Beiträge des Benutzers
specialwork
myCSharp.de - Member

Avatar #avatar-3374.png


Dabei seit:
Beiträge: 26
Herkunft: Koblenz

beantworten | zitieren | melden

Hallo pdelvo,

Möglicherweise kannst Du noch ein wenig Performance durch die Vorkompilierung mit ngen herauskitzeln.

Dazu solltest Du deine Assemblies in den GAC (Global Assembly Cache) kopieren und anschließend mit dem Tool (ngen.exe) vorkompilieren bzw. ins ZAP (Cache für native Assemblies) installieren.

Das Tool findest Du unter (C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe)

Syntax:

Assembly und alle referenzierten Assemblies kompilieren
ngen install "[Path\assembly.extension]"

Nur Assembly kompilieren
ngen install /NoDependencies "[Path\assembly.extension]"

Assembly aus ZAP deinstallieren (Achtung ohne Dateierweiterung (Displayname))
ngen uninstall "[Path\assembly.extension]"

Alle Assemblies dessen Kompilierungsstatus dirty sind neu kompilieren
ngen update

Gruß,
Thomas van Veen
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

ngen sollte auf keinen fall grundlage von ausreichender performance sein.

zudem basiert hier fast alles auf directx und somit wäre der gewinn absolut minimal.
specialwork
myCSharp.de - Member

Avatar #avatar-3374.png


Dabei seit:
Beiträge: 26
Herkunft: Koblenz

beantworten | zitieren | melden

@JAck30lena;
Zitat von JAck30lena
ngen sollte auf keinen fall grundlage von ausreichender performance sein.

... das behauptet auch keiner!-Dennoch bietet Dir ngen die Möglichkeit Deine Anwendung, selbst wenn sie zu 99,9% performance-optimiert ist, um einen gewissen Prozentsatz zu beschleunigen. Dieser Prozentsatz ist natürlich abhängig vom Betriebssystem(64/32bit),von der Prozessorarchitektur und von der Architektur der Software selbst.
Zitat von JAck30lena
zudem basiert hier fast alles auf directx und somit wäre der gewinn absolut minimal.

Es geht darum das die Update methode angeblich schnell ist, und die Anwendung auf einem "schwachen" laptop ausgeführt wird. Da ist selbst ein minimaler Performancegewinn ein Gewinn.

Gruß,
Thomas van Veen
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

Themenstarter:

beantworten | zitieren | melden

Es liegt wohl an diesem Laptop. Ich hab es auf einem etwas stärkerem getestet, und da hab ich 60fps. Dieser ist wohl nicht dafür geeignet.

Gruß pdelvo
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

ngen ist aber nciht für enwicklungsphasen geeignet. beim fertigen produk spricht ncihts dagegen aber während der entwicklung? vor allem im debugmode ist ngen absolut fehl am platz da man ansonsten nciht mal vernünftig debuggen kann.
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Evtl. hilft dir das hier weiter: XNA: riesige Performanceunterschiede auf verschiedenen Rechnern
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Servus,

wie ist dein Laptop bestückt?
  • Marke
  • GraKa
  • CPU
  • RAM
  • ...


Hätte da ein paar alte bei mir rumstehen. Wenn du einen Testcode zur Verfügung stellst, könnten wir dir mit Sicherheit mehr Informationen zu kommen lassen.

Gruß,
Thomas
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1.346

Themenstarter:

beantworten | zitieren | melden

Es hat sich erledigt. der Laptop war nicht von mir. Es ist ein altes. XP 512mb ram. ein langsamer amd. Lahme Graka. Ich hab es aber jetzt auf 45fps beschleunigt bekommen und hab auf meinem "großen" PC wieder 60fps.Ich zeig drotzdem mal meinen Code her:


        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None, cam.GetMatrix (Window.ClientBounds));
            spriteBatch.Draw(ground,new Rectangle(0,0,ground.Width,ground.Height),Color.White);
            dr.Render(spriteBatch);
            spriteBatch.End();
            base.Draw(gameTime);
        }
Und nochmal in der Klasse driver:


public void Render(SpriteBatch batch)
        {
            batch.Draw(texture, new Rectangle((int)position.X, (int)position.Y, 50, 300 / 4)
                , null, Color.White, rotation, new Vector2(texture.Width / 2, texture.Height / 2),
                SpriteEffects.None, 0);
        }

Wie man (vieleicht) sehen kann, dreht sich die Kamera jetzt mit.

Gruß pdelvo
private Nachricht | Beiträge des Benutzers
Corpsegrinder
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Zitat von Expandable
Liegt eventuell am VSync. Dein Laptop ist schnell genug, beide Objekte einzeln mit 60 FPS zu rendern. Sofern er aber beide rendern soll, reicht's vielleicht nur noch für 58 fps. Mit aktiviertem VSync werden daraus dann 30.

Wie kommst du denn zu der Annahme? VSync halbiert keine Frameraten, sondern passt die Anzeige an den Monitor an (verhindert, dass eine Aktualisierung des Bildes während des Bildausfbaus). Es sind dann lediglich keine Frameraten über der eingestellten Hertzzahl möglich. Ich denke auch, dass es am Notebook liegt, obwohl auch bei einem so alten Gerät nicht so krasse Probleme bei 2 Objekten auftreten sollten.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Evtl. gibts keine Hardwareunterstützung bei dem Laptop. Am fehlenden Speicher wirds wohl eher nicht liegen, mit den zwei Objekten... Es sei denn die Textur ist in 4K-Auflösung oder sowas...
Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1.130
Herkunft: Norddeutschland

beantworten | zitieren | melden

Ich hab mal gehört, dass xna immer einen eigenen Pixel und Vertexshader einsetzt. Es kann gut sein, dass der laptop eine graka hat, die die shaderversion von xna nicht unterstützt. Dann wird das mit software emuliert.
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
J2T
myCSharp.de - Member



Dabei seit:
Beiträge: 66
Herkunft: Bärlin

beantworten | zitieren | melden

Ja Floste das stimmt. XNA arbeitet komplett auf Shaderbasis(BasicEffect) und nicht mehr mit der FixedFuntionPipeline. Jedoch wird, wenn die entsprechende Shaderversion(bei XNA 2.0 war es 1.1) nicht von der GraKa bereitgestellt wird, nicht automatisch emuliert. Das muss man explizit beim DeviceType angeben. Standart ist das Hardware und wird folglich eine Exception werfen.
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Hallo J2T,
Zitat
Das muss man explizit beim DeviceType angeben. Standart ist das Hardware und wird folglich eine Exception werfen
Betrachte das ganze nicht nur von C# aus. Wie sieht es mit den GraKa Teiber aus? Es kann durch aus vorkommen, dass dieser einiges emuliert und die CPU damit belastet. Besonders bei Laptops sollte man da genauer hinschauen ;)

XNA 3 benötigt mind. das Shader-Model 2.0 für den BaseEffect. Alle DirectX 9.0 Karten haben erstmals den Shader 2.0 mit an Board, was der Laptop wahrscheinlich auch erfüllen dürfte.
Dennoch sollte man beim Programmstart eine Abfrage einbauen.

Erfüllt dein Gast-System nicht die Anforderungen, dann bekommst du eine NoSuitableGraphicsDeviceException.
Zitat von MSDN
If NoSuitableGraphicsDeviceException does not have an inner exception, it is likely that your graphics card does not have a DirectX 9 driver, that it does not support Shader Model 1.1, or that the hardware acceleration slider is not set to Full in your settings.

Gruß,
Thomas
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

Das sind alles nur Vermutungen, und es wäre so einfach, es herauszubekommen (TaskManager, NPerf etc.)
Einfach mal ausprobieren, wo der Flaschenhals beim Programm ist hilft hier weiter.
So ein unglaublich simples Programm sollte auf jedem Laptop laufen, auch wenn es noch so lahm ist.
Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers