2014-06-17 5 views
3

Je crée une application Windows Phone 8, j'ai un Windows Phone 8 avec 512 Mo de RAM, Lorsque je lance l'application sur l'émulateur, il fonctionne très bien, mais quand je vérifie sur Windows Téléphone 8 périphérique, je reçois l'exceptionSystem.OutOfMemoryException dans Windows Phone 8

System.OutOfMemoryException 

Lorsqu'il reste encore beaucoup de mémoire libre. Voir mon code ci-dessous:

private IsolatedStorageFileStream isoVideoFile; 
string isoVideoFileName = "Movie.mp4"; 

using (isoVideoFile = new IsolatedStorageFileStream(isoVideoFileName, 
FileMode.OpenOrCreate, FileAccess.ReadWrite, 
IsolatedStorageFile.GetUserStoreForApplication())) 
{ 
    using (MemoryStream stream = new MemoryStream()) 
    { 
    isoVideoFile.Write(stream.GetBuffer(), 0, (int)stream.Position); 
    } 
    byte[] binaryData = new Byte[isoVideoFile.Length]; 

    long bytesRead = isoVideoFile.Read(binaryData, 0, (int)isoVideoFile.Length); 
    string videofile = Convert.ToBase64String(binaryData, 0, binaryData.Length);        
} 
+1

Voulez-vous vraiment placer tout le contenu du fichier dans la mémoire? Vous ne pouvez pas convertir le morceau de fichier par morceau? –

+0

Oui. Le fichier VIDEO suppose un fichier vidéo. Quelle est la taille? Je suggère fortement de ne pas le lire comme ceci - utiliser des tampons plus petits (512kb) et juste déplacer le morceau par morceau. – TomTom

+0

Le fait que votre appareil dispose de x Mo gratuit ne signifie pas que vous pouvez réellement allouer x Mo. Il y a cette chose appelée fragmentation de la mémoire. En outre, il y a probablement une limite par application. – dandan78

Répondre

0

Vous assumez qu'il est "pas de mémoire". C'est vraiment "pas assez de mémoire en un seul morceau". La fragmentation LOH (Large Object Heap) est un problème connu.

Charger un fichier comme ça est terriblement inefficace.

Première:

new MemoryStream() 

C'est TONNES de réaffectations du tableau. Initialisez-le à la taille du tableau au préalable.

Mais mieux:

Déplacer les données en blocs de 512 Ko, de sorte que vous n'êtes pas un porc de mémoire. Pas besoin de tout charger en mémoire à la fois.

+0

merci mec, mais pouvez-vous me montrer par code, je ne sais pas, merci pour votre réponse rapide !! –

+0

rhughes, pouvez-vous me guider par code, frère !! –

+0

Oui, je le peux, mais je ne fournis généralement pas de solution "prêt, j'ai fait votre travail pour vous" par principe. Je crois que les gens devraient utiliser leur cerveau pour travailler à travers la documentation une fois qu'ils ont une idée du problème. – TomTom