Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns>true if memleak</returns>
        /// <param name="create"></param>
        /// <param name="cleanup"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <typeparam name="T"></typeparam>
        private Leaks PerformTest <T>(Func <T> create, Action <T> cleanup, int operationCount, out MemorySnapShot start, out MemorySnapShot end)
        {
            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Application.RaiseIdle(EventArgs.Empty);
                GC.Collect();
                GC.WaitForPendingFinalizers();
                _memoryService.HeapMinimize(true);
            }

            start = MemorySnapShot.Record();

            for (int i = 0; i < operationCount; i++)
            {
                var o = create();
                cleanup(o);
                o = default(T);
            }

            for (int i = 0; i < 5; i++)
            {
                Application.DoEvents();
                Application.RaiseIdle(EventArgs.Empty);
                GC.Collect();
                GC.WaitForPendingFinalizers();
                _memoryService.HeapMinimize(true);
            }

            end = MemorySnapShot.Record();

            return(IsMemoryLeak(start, end));
        }
Ejemplo n.º 2
0
            public string CompareToBaseLine(MemorySnapShot baseLine)
            {
                var sb = new System.Text.StringBuilder();

                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "total prog size : ", (long)ToMb(TotalProgSize), (long)ToMb(TotalProgSize - baseLine.TotalProgSize));
                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "resident        : ", (long)ToMb(Resident), (long)ToMb(Resident - baseLine.Resident));
                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "share           : ", (long)ToMb(Share), (long)ToMb(Share - baseLine.Share));
                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "text            : ", (long)ToMb(Text), (long)ToMb(Text - baseLine.Text));
                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "data + stack    : ", (long)ToMb(DataAndStack), (long)ToMb(DataAndStack - baseLine.DataAndStack));
                sb.AppendFormat(" {0} {1,5}Mbs change from base {2,5}Mbs\n", "Mono Mem Size:  : ", (long)ToMb(MonoManagedMemory), (long)ToMb(MonoManagedMemory - baseLine.MonoManagedMemory));

                return(sb.ToString());
            }
Ejemplo n.º 3
0
        private Leaks IsMemoryLeak(MemorySnapShot start, MemorySnapShot end)
        {
            var ret = Leaks.None;

            // Check for managed memory
            if ((int)MemorySnapShot.ToMb(end.MonoManagedMemory) > (int)MemorySnapShot.ToMb(start.MonoManagedMemory))
            {
                ret |= Leaks.Managed;
            }

            // Check for help leaks.
            if ((int)MemorySnapShot.ToMb(end.DataAndStack) > (int)MemorySnapShot.ToMb(start.DataAndStack))
            {
                ret |= Leaks.Heap;
            }

            return(ret);
        }