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); }