2012-10-02 4 views
0

J'ai essayé pendant des heures de comprendre cela. Lorsque cela s'exécutera, il fonctionnera jusqu'à ce que le système manque de mémoire. J'ai essayé de disposer du bmp créé après utilisation, cela ne faisait aucune différence. J'ai également essayé de disposer du webbrowser, mais j'ai besoin d'exécuter la page web sur une boucle avec la bonne hauteur/largeur, etc. pour en faire une capture. J'ai essayé de créer un nouveau webbrowser tout ce qu'il boucle puis en disposer mais cela ne fonctionnerait pas. Quelqu'un peut-il voir ce qui peut se passer ici?C# erreur de mémoire insuffisante

La boucle:

 wbcondor1.AllowNavigation = true; 
     wbcondor1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbcondor1_DocumentCompleted); 
     wbcondor1.Navigate("blanked out"); 

le document terminé

private void wbcondor1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     Bitmap condor1bmp = new Bitmap(600, 1000); 
     wbcondor1.DrawToBitmap(condor1bmp, new Rectangle(wbcondor1.Location.X, wbcondor1.Location.Y, wbcondor1.Width, wbcondor1.Height)); 

     if (Convert.ToString(condor1bmp.GetPixel(553, 558)) == "Color [A=255, R=232, G=30, B=48]") { c1to1.Text = "lower"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 584)) == "Color [A=255, R=232, G=30, B=48]") { c1to2.Text = "lower"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 608)) == "Color [A=255, R=232, G=30, B=48]") { c1to3.Text = "lower"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 633)) == "Color [A=255, R=232, G=30, B=48]") { c1to4.Text = "lower"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 658)) == "Color [A=255, R=232, G=30, B=48]") { c1to5.Text = "lower"; } 

     if (Convert.ToString(condor1bmp.GetPixel(553, 558)) == "Color [A=255, R=0, G=175, B=88]") { c1to1.Text = "higher"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 584)) == "Color [A=255, R=0, G=175, B=88]") { c1to2.Text = "higher"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 608)) == "Color [A=255, R=0, G=175, B=88]") { c1to3.Text = "higher"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 633)) == "Color [A=255, R=0, G=175, B=88]") { c1to4.Text = "higher"; } 
     if (Convert.ToString(condor1bmp.GetPixel(553, 658)) == "Color [A=255, R=0, G=175, B=88]") { c1to5.Text = "higher"; } 
     // bmp.Save("condor1.gif"); 
     condor1bmp.Dispose(); 
    } 

Merci à tous, nous espérons que quelqu'un peut voir ce que je suis absent :(

+0

Par exemple, commentez le corps de 'wbcondor1_DocumentCompleted()' - avez-vous encore de la mémoire à court terme? – cdhowie

+0

n'a même pas pensé à faire ça. Juste fait et il sera toujours à court, continue à construire avec chaque boucle – mxadam

+0

Ensuite, ce bloc n'est pas la source de votre problème. Exécutez votre code dans un profileur et recherchez des allocations énormes, ou un grand nombre de petites allocations, puis essayez de trouver d'où elles viennent. – cdhowie

Répondre

0

Si une exception est levée,

condor1bmp.Dispose(); 

w Je ne serai pas appelé.

Utilisez toujours un using pour envelopper les choses qui mettent en œuvre IDisposable. À part cela, il y a beaucoup de choses qui peuvent provoquer une exception OutOfMemoryException lorsque vous travaillez avec un bitmap, autre que le manque de mémoire.

Pour plusieurs possibilités, voir

C# Out of Memory when Creating Bitmap

Est-il possible que votre test de stress frappe une de ces conditions?

+0

Je viens de commenter le document terminé partie et il se lève toujours ce qui signifie que chaque fois que je dis au navigateur web de rafraîchir la page de la mémoire se construit à chaque fois – mxadam

0

Juste pour faire savoir aux utilisateurs qui rencontrent cette erreur. Manque de mémoire sur la ligne x. C'est un problème avec Internet Explorer lui-même. Il peut être arrêté en activant les scripts actifs dans les paramètres IE pour désactiver le javascript. Commentez chaque partie de votre logique jusqu'à ce que la fuite disparaisse.