begin process at 2012 05 29 17:23:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Problème de gestion de la memoire - stockage de données 3D lues dans un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de gestion de la memoire - stockage de données 3D lues dans un fichier

lundi 26 octobre 2009 à 22:08:06 | Problème de gestion de la memoire - stockage de données 3D lues dans un fichier

serialtom

Bonjour à tous,

je vous contacte car j'ai un gros problème de gestion de la mémoire. voici mon contexte. j'ai implémenté une application qui sert a visualiser en 3D des points, courbes et surfaces. pour cela j'ai créé une classe parser, une classe static container (avec en données mebre static listepoints,listecourbes & listesurfaces), et une classe viewer. j'ai aussi des classes d'objets geometriques comme point (avec en donnée membre nom, X, Y, Z).

j'ai un fichier contenant 8700 points environs. en construisant ma liste de points je remplis deja presque 600Mo de Memoire !

avez vous une piste pour commencer à creuser ce soucis ???

dites moi de quelle partie du code vous avez besoin pour identifier le pb.

merci encore pour votre aide.

bonne soiree
lundi 26 octobre 2009 à 23:43:50 | Re : Problème de gestion de la memoire - stockage de données 3D lues dans un fichier

CptPingu

Administrateur CodeS-SourceS
Effectivement, sans code, ça va être dur de t'aider.

Néanmoins, pour avoir 600Mo de mémoire prise, c'est que tu fais forcément de la duplication en mémoire.
- Vérifie que lorsque tu passes des arguments, tu les passes par références et non par copie
- Vérifie que tu ne fais pas de concaténation de std::string, mais que tu utilises bien un stringstream.
- Utilise le partage de mémoire pour des objets similaires (voir design pattern flyweight)

Si ton application n'est pas trop grosse, je serais curieux de voir les classes conteneurs, et les méthodes qui les manipulent.
mercredi 28 octobre 2009 à 11:35:56 | Re : Problème de gestion de la memoire - stockage de données 3D lues dans un fichier

serialtom

Ok je vais verifier tes premieres pistes.

je t'envoie les source incrimines des que je peux.

merci pour ton aide
jeudi 29 octobre 2009 à 19:02:11 | Re : Problème de gestion de la memoire - stockage de données 3D lues dans un fichier

serialtom

voici ma classe conteneur :

#include "SOFGeometryContainer.h"

std::vector <SOF3DControlPoint> SOFGeometryContainer::_ListOfControlPoints;
SOF3DBoundingBox SOFGeometryContainer::_ContainerBoundaries;
std::vector <SOF3DNURBSCurve> SOFGeometryContainer::_ListOfCurves;
std::vector <SOF3DNURBSSurface> SOFGeometryContainer::_ListOfSurfaces;
bool SOFGeometryContainer::_IsContainerDirty;

SOFGeometryContainer::SOFGeometryContainer(void)
{
_IsContainerDirty = false;
}

SOFGeometryContainer::~SOFGeometryContainer(void)
{
_ListOfControlPoints.clear();
}

int SOFGeometryContainer::Add3DControlPoint(const SOFString &iCPName, const double & iCPx, const double & iCPy,const double & iCPz)
{
SOF3DControlPoint CP;
CP.SetName(iCPName);
CP.SetX(iCPx);
CP.SetY(iCPy);
CP.SetZ(iCPz);
_ListOfControlPoints.push_back(CP);
_ContainerBoundaries.UpdateBoxWithPosition(iCPx,iCPy,iCPz);
_IsContainerDirty = true;
return 0;
}

int SOFGeometryContainer::Add3DNURBSCurve(SOF3DNURBSCurve iCurve)
{
_ListOfCurves.push_back(iCurve);
return 0;
}

int SOFGeometryContainer::Add3DNURBSSurface(SOF3DNURBSSurface iSurface)
{
_ListOfSurfaces.push_back(iSurface);
return 0;
}

int SOFGeometryContainer::GetContainerBoundaries(SOF3DBoundingBox &oContainerBoundaries)
{
oContainerBoundaries = _ContainerBoundaries;
return 0;
}
int SOFGeometryContainer::Get3DControlPoints(std::vector <SOF3DControlPoint> *&opListOfControlPoints)
{
if(_ListOfControlPoints.size()>0)
opListOfControlPoints = &_ListOfControlPoints;
else
opListOfControlPoints = NULL;
return 0;
}
int SOFGeometryContainer::Get3DCurves(std::vector <SOF3DNURBSCurve> *&opListOfCurves)
{
if(_ListOfCurves.size()>0)
opListOfCurves = &_ListOfCurves;
else
opListOfCurves = NULL;
return 0;
}
int SOFGeometryContainer::Get3DSurfaces(std::vector <SOF3DNURBSSurface> *&opListOfSurfaces)
{
if(_ListOfSurfaces.size()>0)
opListOfSurfaces = &_ListOfSurfaces;
else
opListOfSurfaces = NULL;
return 0;
}
int SOFGeometryContainer::Find3DControlPointFromName(const SOFString iName, SOF3DControlPoint *& o3DControlPoint)
{
if(true==iName.IsEmpty())return -1;
o3DControlPoint = NULL;
for(unsigned int i=0;i<_ListOfControlPoints.size();i++)
{
SOFString CurrentName;
int rc = _ListOfControlPoints.at(i).GetName(CurrentName);
if(0!=rc)return rc;
SOFString InputName = iName;
if(0<InputName.Find(CurrentName)||0<CurrentName.Find(InputName))
{
o3DControlPoint = &_ListOfControlPoints.at(i);
break;
}
}
if(NULL==o3DControlPoint)return 1;
return 0;
}

bool SOFGeometryContainer::HasContainerBeenModified()
{
if(_IsContainerDirty)
{
_IsContainerDirty = false;
return true;
}
else return false;
}

void SOFGeometryContainer::Release()
{
_ListOfControlPoints.clear();
_ListOfCurves.clear();
_ListOfSurfaces.clear();
}

je remplis les infos dans mon parser comme suit

les points (8700 fois ca) :

ListOfSubStrings = LineString.Split(SOFString(','));
if(ListOfSubStrings.size()>1)
{
if(ListOfSubStrings.at(0)==SOFString("CARTESIAN_POINT"))
{
if(ListOfSubStrings.size()==5)
{
if(ListOfSubStrings.at(1)==SOFString("'Control Point'"))
{
//Positions 3,4 & 5 are the coordinates
int rc = SOFGeometryContainer::Add3DControlPoint(STemp,
ListOfSubStrings.at(2).ToDouble(),
ListOfSubStrings.at(3).ToDouble(),
ListOfSubStrings.at(4).ToDouble());
}
}
}

ensuite dans le redraw de ma scene je recuere la liste des controls points mais sur mon modele la memoire est deja pleine avant .....

desolé pour le delai ...

merci de ton aide


Cette discussion est classée dans : problème, données, gestion, 3d, memoire


Répondre à ce message

Sujets en rapport avec ce message

gestion d'une base de données MySQL en C [ par titeuf21121 ] Salut tout le monde,alors, v'là mon problème:Je souhaite gérer une base de données MySQl avec un programme en C.J'utilise la librairie libmysql.J'arri gros problème base de données [ par skysee ] Salut,j'ai un gros problème avec mase de données.J'utillise le composant ATL pour me connecter à ma base de données.Donc il mes génère 2 classes dont OpenGL gestion memoire [ par xarier ] SVP j'ai prob que je ne c pas comment le geré c que quand j'ouvre mon pojet sous vc++plusieur fois mon pc n'a plus de resources libre je crois que c p Memoire partagée de DLL PERDUE [ par vlacnog ] Bonjour,voici mon problème.Je développe une DLL dans laquelle je crée un fichier mappé en mémoire (via CreatFileMapping et MapViewOfFile).De plus, la Moteur 3D, gestion des collisions [ par fabienGL ] Bonjour, je vous écris car j'ai 2 question :1)OpenGL c'est une librairies graphiques, pourtant entends-t-on parler de moteurs 3D j'aurais aimé savoir Gestion d'appartements [ par ScorpionTiti ] Salut à tous!Merci pour toutes vos suggestions. Vous m'avez bien aidé.Cependant, je vais être encore chiant. Je dois établir une gestion de dix appar Problème de gestion multilangue... [ par liv ] Bonjour à tous,J'ai un programme en VC++ .NET avec les MFC qui inclue la gestion multilangue (pour le moment Français, Anglais) s'appuyant sur l'intég [visual C++] problème (très bizarre) avec un CString [ par drinkmilk ] Bonjour, je fait une requête sur une base access. Je récupère les données ainsi: <T Problème de mise à jour de ma base de données [ par lam_insat ] Mon application consiste une application multi-tierd.Le probléme est que les modifications que fait un client ne parviennent pas à un deuxieme que lor gestion des fenetres (opngl/glut) [ par PIEDPIED13 ] bonjour.Je fais un programme en c avec opnGL et Glut.j'affiche une fenetre pour faire un rendu 3d et une autre où je veux représenter quelquechose en


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales