public static void Print(ProcessAnalysisResult analysis, bool log = false)
        {
            foreach (var unifiedThread in analysis.Threads)
            {
                var print = GetData(unifiedThread);
                PrintToLog(print);
                PrintToConsole(print);
            }

            if (IsSet(Options, PrintOptions.HandlesSummary))
            {
                var sammary = GetSummary(analysis);
                PrintToLog(sammary);
                PrintToConsole(sammary);
            }
        }
        private static StringBuilder GetSummary(ProcessAnalysisResult analysis)
        {
            StringBuilder sb = new StringBuilder();

            Dictionary<string, int> temp = new Dictionary<string, int>();

            sb.AppendLine(":: SUMMARY ::");
            foreach (var item in analysis.Threads)
            {
                if (item.BlockingObjects == null)
                    continue;

                foreach (var block in item.BlockingObjects)
                {
                    var key = block.Reason.ToString();
                    if (temp.ContainsKey(block.Reason.ToString()))
                    {
                        temp[key]++;
                    }
                    else
                    {
                        temp[key] = 1;
                    }
                }
            }

            foreach (var item in temp)
            {
                sb.AppendLine($"{item.Key} : {item.Value}");
            }

            sb.AppendLine($"Elapsed Time: {analysis.ElapsedMilliseconds}");
            return sb;
        }