Hey Leute
Ich bin neu bei C#, und hab grad ein bischen mit XNA angefangen.
Ich hab mir selbst eine Klasse als tilemap geschrieben, in der es auch eine Render Methode gibt.
Diese Rendermethode ist komischerweise extrem langsam. Sie funktioniert zwar (alle wird korrekt gerendert)
allerdings seehr langsam. Pro durchlauf ca 400-500 millisekunden.
Hier ist mal der Code
Ich weiß die 2 for-schleifen in einander multiplizieren sich, allerdings laufen beide jeweils 4 mal durch, d.h. insgesamt wir der code innerhalb der inneren Schleife 16 mal ausgeführt, was eigentlich kein Problem sein sollte.
Habt ihr eine Idee warum das so ewig dauern könnte?
Leigt es vielleicht an dem try-catch block? die ArgumentNullException wird nämlich in diesem fall fast immer geworfen.
Ich bin neu bei C#, und hab grad ein bischen mit XNA angefangen.
Ich hab mir selbst eine Klasse als tilemap geschrieben, in der es auch eine Render Methode gibt.
Diese Rendermethode ist komischerweise extrem langsam. Sie funktioniert zwar (alle wird korrekt gerendert)
allerdings seehr langsam. Pro durchlauf ca 400-500 millisekunden.
Hier ist mal der Code
Code:
public void render(SpriteBatch sb, Rectangle srcRect, Vector2 destPos)
{
Stopwatch tm = new Stopwatch();
// zum Testen wie lange der vorgang dauert
tm.Restart();
for (int y = 0; y < srcRect.Height; y++)
// Eine Reihe nach der anderen wird durchlaufen
{
for (int x = 0; x < srcRect.Width; x++)
// Ein Tile nach dem anderen in dieser Reihe wird durchlaufen
{
String texID = textureAtlas[tiles[x+srcRect.X,y+srcRect.Y]];
// die ID der Textur des aktuellen Tiles wird abgefragt
try
{
sb.Draw(ResourceManager.getTexture(texID), new Vector2(destPos.X + x * tileSize, destPos.Y + y * tileSize), Color.White);
//Die Textur wird gerendert
}
catch (ArgumentNullException)
// Für den fall das das Tile die ID 0 hat, und somit nichts gerendert werden soll
{
}
}
}
long abc = tm.ElapsedMilliseconds;
//Zur Abfrage der Zeit
long xy = abc;
//Zur einfachen anzeige der Variable im Debugmodus
}
Ich weiß die 2 for-schleifen in einander multiplizieren sich, allerdings laufen beide jeweils 4 mal durch, d.h. insgesamt wir der code innerhalb der inneren Schleife 16 mal ausgeführt, was eigentlich kein Problem sein sollte.
Habt ihr eine Idee warum das so ewig dauern könnte?
Leigt es vielleicht an dem try-catch block? die ArgumentNullException wird nämlich in diesem fall fast immer geworfen.
Zuletzt bearbeitet:
(Übersicht)