Les graphiques.DrawImage: de mémoire d'exception

Je ne peux pas pour la vie de me comprendre pourquoi je me fais un mémoire exception à la règle, même après beaucoup de recherches sur différents sites et forums. Quelqu'un est-il en mesure de faire la lumière sur la racine de tous les maux dans ce code? L'exception est levée par l'appel à la Graphiques.La méthode DrawImage (), ligne 79.

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditImage(FileModel model)
    {
        var fileData = new MySite.Models.File(model.FileID, model.ClientID, ConfigurationManager.ConnectionStrings["MySite"].ConnectionString).Data;
        Image image = null;

        using (var memStream = new MemoryStream())
        {
            memStream.Write(fileData, 0, fileData.Length);
            image = Image.FromStream(memStream);
        }

        using (var graphics = Graphics.FromImage(image))
        {
            graphics.DrawImage(image, model.x1, model.y1, (model.x2 - model.x1), (model.y2 - model.y1));
            graphics.Save();
        }

        using (var memStream = new MemoryStream())
        {
            image.Save(memStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            return File(memStream.ToArray(), "image/jpeg");
        }
    }

Trace de la pile:

[OutOfMemoryException: Out of memory.]
System.Drawing.Graphics.CheckErrorStatus(Int32 status) +1143476
System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height) +141
ProPilot.Controllers.DocumentsController.EditImage(FileModel model) in C:\DEV\Web\Controllers\DocumentsController.cs:79
lambda_method(Closure , ControllerBase , Object[] ) +104
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +211
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48
System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57
System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223
System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629296
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
  • sur quelle ligne?..
  • Pouvons-nous peut-être obtenir la stacktrace?
  • Ah, oui, bien sûr. Désolé de ne pas l'inclure immédiatement!
  • Obtenez-vous un souvenir d'exception à chaque fois que vous exécuter ce morceau de code ou au fil du temps? Vous n'êtes pas disposer de l'image de l'objet qui va entraîner une fuite de mémoire.
  • Chaque fois que j'exécute ce code.
  • Je pense qu'il est possible que l'image est vissé lorsque vous fermez le memstream.. c'était le problème de ce - stackoverflow.com/questions/16030269/...
  • Quel est le but de ce code? Vous créez une image à partir d'un fichier et ensuite le dessin de la même image sur l'objet graphique créé à partir de l'image? Il semble que l'on pourrait laisser tomber l'ensemble de l'étape avec l'objet graphics et il suffit d'utiliser l'image telle qu'elle est. Semble un peu étrange.
  • Vous avez eu raison! Merci de poster cette réponse 🙂
  • Maritim, tout simplement accepter lummo de réponse.. je suis paresseux 🙂
  • Je suis dans le milieu de l'écriture d'une méthode de traitement d'un POST de présentation. Ce qui en résultent dans le code, actuellement, ne pas faire beaucoup de sens.
  • Juste assez juste assurez-vous de disposer de tous vos IDisposable objets (comme l'Image) lorsque vous avez fini le code ou vous finirez fuite de mémoire et les poignées dans le long terme 🙂
  • Yes sir! 😀

InformationsquelleAutor Maritim | 2013-04-17