2015-11-08 2 views
0

Création d'un logiciel pour un Symbol MC75A à l'aide de C# .net CF 2.0. Nous scannons un code à barres et il renvoie des informations de stock, mais j'essaie d'ajouter une fonctionnalité qui obtient une image à partir d'une URL. Chaque analyse actualise l'écran avec les nouvelles données de la base de données et obtient également l'image de la nouvelle URL. Il scanne quelques codes-barres et renvoie peut-être 4/5 images sans problème, puis tout à coup une exception OutOfMemoryException se produit. Le code im utilisant pour obtenir l'image est:.net Compact Framework 2.0 - Exception OutOfMemory lors du téléchargement d'une image

 public Bitmap GetImage(string URL) 
    { 
     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL); 
     myRequest.Method = "GET"; 

     myRequest.AllowWriteStreamBuffering = false; 



     HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse(); 

     System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream()); 
      myResponse.Close(); 


      return bmp; 

    } 

Appelé par:

     pbImage.Image = GetImage(ProductImage); 
        pbImage.SizeMode = PictureBoxSizeMode.StretchImage; 

J'ai essayé de se débarrasser de l'image avant chaque nouvelle GET avec pbImage.Image.Dispose() mais toujours obtenir le même exception. Les tailles d'image sont comprises entre 100 Ko et 550 Ko. Que cela fasse une différence, les tailles d'images sont toujours supérieures à 1000 pixels de chaque côté.

Ai-je manqué la bonne façon de disposer avant de ré-obtenir ou est-ce en quelque sorte en cache toutes ces images qui crée alors une exception outofMemory?

+0

les images vont dans des fichiers IE temporaires. Vous voudrez peut-être supprimer votre historique de navigation. Parfois, l'utilisation d'un renifleur comme un violoniste ou un wireshark peut aider à isoler les problèmes de téléchargement. – jdweng

+0

Se brise-t-il toujours sur la même image? System.Drawing est célèbre pour lancer OutOfMem pour beaucoup d'autres raisons. Ceux-ci peuvent être manipulés avec un essai/catch. –

+0

Votre 'myRespones.Close()' devrait être dans un bloc finally ou using. Êtes-vous sûr qu'il n'y a pas d'autres exceptions? –

Répondre

0

Juste au cas où quelqu'un aurait accès à l'emplacement de l'image. Un meilleur travail pour moi était de créer une page Web nommée resize.aspx et de remplir la zone d'image de la page avec le nom de fichier de l'image en tant que paramètre. Maintenant que cette page (étant sur le serveur dans le même emplacement que les images) était capable de redimensionner l'image et retourner une petite image 300x300px. Semblait être la meilleure solution à laquelle je pouvais penser. Cela peut également fonctionner pour les images à n'importe quelle URL si vous passez l'URL complète de l'image dans une autre page et que cette page renvoie la vignette requise.