Ejemplo n.º 1
0
        public static decimal StackTraceSimilarity(
            IList <ClrStackFrame> stackTrace,
            IList <ClrStackFrame> comparisonStackTrace)
        {
            if (stackTrace.Count == 0 || comparisonStackTrace.Count == 0)
            {
                return(0);
            }

            var originStackTraceDisplayNames     = stackTrace.Select(row => row.DisplayString).ToList();
            var comparisonStackTraceDisplayNames = comparisonStackTrace.Select(row => row.DisplayString).ToList();

            var collectionDifference = new Diff <string>(originStackTraceDisplayNames, comparisonStackTraceDisplayNames).Generate()
                                       .ToList();

            if (!collectionDifference.Any(diff => diff.Equal))
            {
                return(0);
            }

            var maxDifference = collectionDifference.Where(diff => diff.Equal)
                                .Max(diff => Math.Max(diff.Length1, diff.Length2));

            var similarityInPercent = ((decimal)maxDifference / Math.Min(stackTrace.Count, comparisonStackTrace.Count)) * 100.0m;

            return(similarityInPercent);
        }