Laden...

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

Erstellt von pdelvo vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.011 Views
pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren
XNA-Performance (Performance halbiert sich, wenn die Darstellung etwas aufwändiger wird)

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

E
42 Beiträge seit 2006
vor 15 Jahren

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.

26 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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.

26 Beiträge seit 2009
vor 15 Jahren

@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.

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

pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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.

5.657 Beiträge seit 2006
vor 15 Jahren

Weeks of programming can save you hours of planning

S
401 Beiträge seit 2008
vor 15 Jahren

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

pdelvo Themenstarter:in
1.346 Beiträge seit 2008
vor 15 Jahren

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

C
401 Beiträge seit 2007
vor 15 Jahren

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.

5.657 Beiträge seit 2006
vor 15 Jahren

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

1.130 Beiträge seit 2007
vor 15 Jahren

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!

J
66 Beiträge seit 2008
vor 15 Jahren

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.

S
401 Beiträge seit 2008
vor 15 Jahren

Hallo J2T,

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.

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

5.657 Beiträge seit 2006
vor 15 Jahren

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