Hi Aurigma,
We have discovered a memory leak somewhere inside of Graphics Mill. We tracked it down using Debug Diagnostics and dumping memory after monitoring for a leak for 1 hour. In that one hour, we had a leak of 36MB.
Here's information from the DebugDiag report. (I emailed the report to Dimitri)
WARNING - DebugDiag was not able to locate debug symbols for Aurigma.GraphicsMill.DLL, so the reported function name(s) may not be accurate.
Aurigma.GraphicsMill.DLL is responsible for 36.98 MBytes worth of outstanding allocations. The following are the top 2 memory consuming functions:
Aurigma_GraphicsMill+12b50a: 36.63 MBytes worth of outstanding allocations.Aurigma_GraphicsMill+9a3ce: 353.22 KBytes worth of outstanding allocations.
Here's a sample method call for that instruction
Function Source Destination
Aurigma_GraphicsMill+9a3ce ole32!CoTaskMemAlloc
0x79E8EFA6
System.StringComparer.GetHashCode(System.Object)
System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)
0x79F35EE8
webengine!HashtableIUnknown::AddCallback+a
webengine!HttpCompletion::ProcessRequestInManagedCode+1a9
webengine!HttpCompletion::ProcessRequestInManagedCode+1a9
webengine!HttpCompletion::ProcessCompletion+41 webengine!HttpCompletion::ProcessRequestInManagedCode
webengine!CorThreadPoolWorkitemCallback+18
0x79F8B7A5
0x79ED8E36
ntdll!bsearch+42
ntdll!RtlEncodeSystemPointer+45b
kernel32!GetModuleHandleForUnicodeString+20
kernel32!GetModuleHandleForUnicodeString+20
kernel32!BasepGetModuleHandleExW+17f kernel32!GetModuleHandleForUnicodeString
kernel32!BasepGetModuleHandleExW+23c
ntdll!LdrpGetProcedureAddress+b3
ntdll!LdrpCallInitRoutine+14
ntdll!NtTestAlert+c
ntdll!NtContinue+c
ntdll!KiUserApcDispatcher+3a ntdll!NtContinue
kernel32!BaseThreadStart+34
Here's another sample call stack
Function Source Destination
Aurigma_GraphicsMill+9a3ce ole32!CoTaskMemAlloc
Aurigma_GraphicsMill+afaf2
Aurigma.GraphicsMill.Color.ConvertColorSpace(Aurigma.GraphicsMill.ColorSpace)
ntdll!ZwReleaseMutant+c
Aurigma.GraphicsMill.Transforms.Transparentize.ThreadProc()
Aurigma.GraphicsMill.Thread.TimerEventProcessor() 0x1EFCAA3C
ntdll!ZwReleaseMutant+c
Aurigma.GraphicsMill.SyncHandler.ThreadProcHandler()
Aurigma.GraphicsMill.Thread.EntryPoint()
Aurigma.GraphicsMill.Thread.Start() Aurigma.GraphicsMill.Thread.EntryPoint()
Aurigma.GraphicsMill.Transforms.BitmapTransform.ApplyTransform(Aurigma.GraphicsMill.Bitmap) Aurigma.GraphicsMill.Thread.Start()
CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.AddWaterMark(Aurigma.GraphicsMill.Codecs.LosslessJpegTransform, Int32, Int32)
CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(System.IO.MemoryStream, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Costar.Shared.Utility.AttachmentSize) CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.AddWaterMark(Aurigma.GraphicsMill.Codecs.LosslessJpegTransform, Int32, Int32)
CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImageFromPath(CoStar.AttachmentUtils.CoStarAurigmaImage ByRef, System.String, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Boolean, Costar.Shared.Utility.AttachmentSize) CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(System.IO.MemoryStream, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Costar.Shared.Utility.AttachmentSize)
CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(Int32, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Boolean, Costar.Shared.Utility.AttachmentSize) CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImageFromPath(CoStar.AttachmentUtils.CoStarAurigmaImage ByRef, System.String, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Boolean, Costar.Shared.Utility.AttachmentSize)
CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(CoStar.AttachmentUtils.ImageRequest) CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(Int32, Int32, Int32, Costar.Shared.Utility.PrintQuality, Boolean, Boolean, Costar.Shared.Utility.AttachmentSize)
Costar.AttachmentHandler.AttachmentHandler.ProcessImageRequest(System.String, System.Collections.Specialized.NameValueCollection, System.String, System.String ByRef) CoStar.AttachmentUtils.BLAurigmaAttachmentUtils.GetCoStarImage(CoStar.AttachmentUtils.ImageRequest)
Costar.AttachmentHandler.AttachmentHandler.ProcessRequest(System.Web.HttpContext) Costar.AttachmentHandler.AttachmentHandler.ProcessImageRequest(System.String, System.Collections.Specialized.NameValueCollection, System.String, System.String ByRef)
System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)
0x79F35EE8
webengine!HashtableIUnknown::AddCallback+a
webengine!HttpCompletion::ProcessRequestInManagedCode+1a9
webengine!HttpCompletion::ProcessRequestInManagedCode+1a9
webengine!HttpCompletion::ProcessCompletion+41 webengine!HttpCompletion::ProcessRequestInManagedCode
webengine!CorThreadPoolWorkitemCallback+18
0x79F8B7A5
0x79ED8E36
ntdll!bsearch+42
ntdll!RtlEncodeSystemPointer+45b
kernel32!GetModuleHandleForUnicodeString+20
kernel32!GetModuleHandleForUnicodeString+20
kernel32!BasepGetModuleHandleExW+17f kernel32!GetModuleHandleForUnicodeString
kernel32!BasepGetModuleHandleExW+23c
ntdll!LdrpGetProcedureAddress+b3
ntdll!LdrpCallInitRoutine+14
ntdll!NtTestAlert+c
ntdll!NtContinue+c
ntdll!KiUserApcDispatcher+3a
We'd like to look at it closer, but we need Graphic Mills' 4.5.23 PDBs to examine the actual calls.
This is causing us to reboot production servers nightly. This is a high priority for us.
Thx, Joel