Libérer mémoire après un new
Bonjour,
depuis un moment je bloque sur un out of memory et je post mon problème afin de savoir si quelqu'un pourrait m'aider à le résoudre.
Travaillant sur Kinect (SDK 1.0 officiel) et avec OpenCVSharp v2.3 et OpenCv v2.3, j'arrive à afficher les images que je veux, mais au bout d'un moment, ma mémoire est pleine et une OpenCVexception intervient( Failed to allocate 1228820 bytes , outofmemory).
J'ai localiser le problème :
Afin de mettre un tableau d'octet dans une CvMat, je suis obliger de faire un CvMat cvmc = new CvMat(480, 640, MatrixType.U8C4, pixC); avec pixC étant un tableau de byte récupérant l'image couleur de la Kinect.
J'ai tout essayer pour vider la mémoire mais rien n'y fait :
cvmc.DecRefData(); ou
cvmc.releaseData(); ou
Cv.ReleaseMat(cvmc); ou
GC.collect(); ou encore
cvmc.dispose();... mais rien n'y fait...
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| byte[] pixC = new byte[640 * 480 * 4];
//fonction qui permet de récuperer le flux vidéo de la kinect (tourne en boucle)
void kinectsensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
//Récupère l'image couleur
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame == null)
{
return;
}
//Copie l'image dans un tableau d'octet (byte)
colorFrame.CopyPixelDataTo(pixC);
//Initialisation de la CvMat avec le tableau de byte pixC
CvMat cvmc = new CvMat(480, 640, MatrixType.U8C4, pixC);
//Affichage de l'image
Cv.ShowImage("essai", cvmc);
//Un release qui fait rien du tout
Cv.ReleaseMat(cvmc);
}
} |
Merci d'avance pour l'aide accorder.