1
DotNet / Ma class consomme trop de memoire
« le: Mai 16, 2016, 08:01:53 pm »
Bonjour tout le monde.Je suis actuellement en train de créer un petit jeu vidéo en 2D avec SFML.
Voilà le topo j'ai une classe Puces de base qui sont des entités que je dois instancier 30fois.
Le problème est lorsque je charge les textures dans les instances. Rien qu'a 5 instances chargée le jeu me consomme 800MO puis crash!!!! Si utilise un tableau ou une liste j'ai la même chose
Si je charge que 4 instances j'ai un pic a 600MO et puis je reviens a 50MO après chargement alors pourquoi ce pic?
est-ce que c'est un problème avec le GC
voici ma class puces de base
Voilà le topo j'ai une classe Puces de base qui sont des entités que je dois instancier 30fois.
Le problème est lorsque je charge les textures dans les instances. Rien qu'a 5 instances chargée le jeu me consomme 800MO puis crash!!!! Si utilise un tableau ou une liste j'ai la même chose
Si je charge que 4 instances j'ai un pic a 600MO et puis je reviens a 50MO après chargement alors pourquoi ce pic?
est-ce que c'est un problème avec le GC
voici ma class puces de base
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SFML.Graphics;
using SFML.System;
using SFML.Window;
using System.Windows.Forms;
namespace jeu_hacker
{
public class Puces_de_base
{
public RenderWindow app { private get ; set; }
private Sprite perso { get; set; }
private Texture tex { get; set; }
public int life { get; internal set; }
public int energy { get; internal set; }
public Puces_de_base(RenderWindow app)
{
this.app = app;
}
public void LoadTextures(string chemin)
{
tex = new Texture(chemin);
perso = new Sprite(tex);
perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / perso.Texture.Size.Y);
}
public void Suppression()
{
app.Dispose();
perso.Dispose();
tex.Dispose();
}
public Puces_attaque Transformation()
{
Puces_attaque convert = new Puces_attaque(this.app);
convert.tex = new Texture("Ressources/Puces attaque.png");
convert.tex.Smooth = true;
convert.perso = new Sprite(convert.tex);
convert.perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.Y);
convert.perso.Position = perso.Position;
return convert;
}
public void Afficher(Vector2f position)
{
perso.Position = position;
app.Draw(perso);
}
public void Afficher(Vector2f position,bool vrai)
{
if (vrai)
{
perso.Position = new Vector2f(position.X - 0.0625f * app.Size.X, position.Y - 0.0625f * app.Size.X);
app.Draw(perso);
}
}
public void Afficher()
{
app.Draw(perso);
}
}
public class Puces_attaque : Puces_de_base
{
public Puces_attaque(RenderWindow app):base(app)
{
life = 200;
}
}
}
et mon Mainusing System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SFML.Graphics;
using SFML.System;
using SFML.Window;
using System.Windows.Forms;
namespace jeu_hacker
{
public class Puces_de_base
{
public RenderWindow app { private get ; set; }
private Sprite perso { get; set; }
private Texture tex { get; set; }
public int life { get; internal set; }
public int energy { get; internal set; }
public Puces_de_base(RenderWindow app)
{
this.app = app;
}
public void LoadTextures(string chemin)
{
tex = new Texture(chemin);
perso = new Sprite(tex);
perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / perso.Texture.Size.Y);
}
public void Suppression()
{
app.Dispose();
perso.Dispose();
tex.Dispose();
}
public Puces_attaque Transformation()
{
Puces_attaque convert = new Puces_attaque(this.app);
convert.tex = new Texture("Ressources/Puces attaque.png");
convert.tex.Smooth = true;
convert.perso = new Sprite(convert.tex);
convert.perso.Scale = new Vector2f((6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.X, (6.25f * app.Size.X / 100f) / convert.perso.Texture.Size.Y);
convert.perso.Position = perso.Position;
return convert;
}
public void Afficher(Vector2f position)
{
perso.Position = position;
app.Draw(perso);
}
public void Afficher(Vector2f position,bool vrai)
{
if (vrai)
{
perso.Position = new Vector2f(position.X - 0.0625f * app.Size.X, position.Y - 0.0625f * app.Size.X);
app.Draw(perso);
}
}
public void Afficher()
{
app.Draw(perso);
}
}
public class Puces_attaque : Puces_de_base
{
public Puces_attaque(RenderWindow app):base(app)
{
life = 200;
}
}
}
namespace jeu_hacker
{
class main
{
static void OnClose(object sender, EventArgs e)
{
// Close the window when OnClose event is received
RenderWindow window = (RenderWindow)sender;
window.Close();
}
static void onClose(object sender, SFML.Window.KeyEventArgs e)
{
if (e.Code == Keyboard.Key.F12)
{
RenderWindow window = (RenderWindow)sender;
window.Close();
}
}
static SFML.Graphics.View vue;
static void Zoom(object sender, MouseWheelScrollEventArgs e)
{
SFML.Graphics.View vueActuelle = vue;
vueActuelle.Zoom(1 + (e.Delta / 10f)*-1);
if (vueActuelle.Size.X > ((RenderWindow)sender).DefaultView.Size.X|| vueActuelle.Size.Y > ((RenderWindow)sender).DefaultView.Size.Y) { vueActuelle.Size = new Vector2f( ((RenderWindow)sender).DefaultView.Size.X , ((RenderWindow)sender).DefaultView.Size.Y); }
vue = vueActuelle;
}
static void Main()
{
// Create the main window
int nombreentitées = 0;
ContextSettings settings = new ContextSettings(32, 32, 8);
RenderWindow app = new RenderWindow(new VideoMode(1280,720), "SFML Works!",Styles.Default,settings);
Vector2f taille_mapX = new Vector2f(app.Size.X, app.Size.Y * 2f);
app.Closed += new EventHandler(OnClose);
app.KeyPressed += new EventHandler<SFML.Window.KeyEventArgs>(onClose);
app.MouseWheelScrolled += new EventHandler<MouseWheelScrollEventArgs>(Zoom);
Color windowColor = new Color(0, 192, 255);
Puces_de_base entitées = new Puces_de_base(app);
entitées.LoadTextures("Ressources/puce.png");
Puces_de_base entitées2 = new Puces_de_base(app);
entitées2.LoadTextures("Ressources/puce.png");
vue = new SFML.Graphics.View(new FloatRect(new Vector2f(640, 360), new Vector2f(854, 480)));
app.SetView(vue);
Puces_de_base entitées3 = new Puces_de_base(app);
entitées3.LoadTextures("Ressources/puce.png");
Puces_de_base entitées4 = new Puces_de_base(app);
entitées4.LoadTextures("Ressources/puce.png");
Puces_de_base entitées5 = new Puces_de_base(app);
entitées5.LoadTextures("Ressources/puce.png");
////etc
{
class main
{
static void OnClose(object sender, EventArgs e)
{
// Close the window when OnClose event is received
RenderWindow window = (RenderWindow)sender;
window.Close();
}
static void onClose(object sender, SFML.Window.KeyEventArgs e)
{
if (e.Code == Keyboard.Key.F12)
{
RenderWindow window = (RenderWindow)sender;
window.Close();
}
}
static SFML.Graphics.View vue;
static void Zoom(object sender, MouseWheelScrollEventArgs e)
{
SFML.Graphics.View vueActuelle = vue;
vueActuelle.Zoom(1 + (e.Delta / 10f)*-1);
if (vueActuelle.Size.X > ((RenderWindow)sender).DefaultView.Size.X|| vueActuelle.Size.Y > ((RenderWindow)sender).DefaultView.Size.Y) { vueActuelle.Size = new Vector2f( ((RenderWindow)sender).DefaultView.Size.X , ((RenderWindow)sender).DefaultView.Size.Y); }
vue = vueActuelle;
}
static void Main()
{
// Create the main window
int nombreentitées = 0;
ContextSettings settings = new ContextSettings(32, 32, 8);
RenderWindow app = new RenderWindow(new VideoMode(1280,720), "SFML Works!",Styles.Default,settings);
Vector2f taille_mapX = new Vector2f(app.Size.X, app.Size.Y * 2f);
app.Closed += new EventHandler(OnClose);
app.KeyPressed += new EventHandler<SFML.Window.KeyEventArgs>(onClose);
app.MouseWheelScrolled += new EventHandler<MouseWheelScrollEventArgs>(Zoom);
Color windowColor = new Color(0, 192, 255);
Puces_de_base entitées = new Puces_de_base(app);
entitées.LoadTextures("Ressources/puce.png");
Puces_de_base entitées2 = new Puces_de_base(app);
entitées2.LoadTextures("Ressources/puce.png");
vue = new SFML.Graphics.View(new FloatRect(new Vector2f(640, 360), new Vector2f(854, 480)));
app.SetView(vue);
Puces_de_base entitées3 = new Puces_de_base(app);
entitées3.LoadTextures("Ressources/puce.png");
Puces_de_base entitées4 = new Puces_de_base(app);
entitées4.LoadTextures("Ressources/puce.png");
Puces_de_base entitées5 = new Puces_de_base(app);
entitées5.LoadTextures("Ressources/puce.png");
////etc