static void WriteLogFile()
 {
     Trace("ThreadTrace.Save");
     TextWriter writer = File.CreateText(logFileName);
     using (writer)
     {
         ThreadLogSnapshot[] logSnapshots = new ThreadLogSnapshot[logs.Count];
         writer.Write("Time");
         for (int i = 0; i < logs.Count; i++)
         {
             logSnapshots[i] = logs[i].GetSnapshot();
             writer.Write(", Thread ");
             writer.Write(i.ToString());
         }
         writer.WriteLine();
         writer.Write("(Ms)");
         foreach (ThreadLog log in logs)
         {
             if (log.IsThreadPoolThread)
                 writer.Write(", (ThreadPool)");
             else if (log.IsBackgroundThread)
                 writer.Write(", (Background)");
             else
                 writer.Write(", (Main)");
         }
         writer.WriteLine();
         int[] indices = new int[logs.Count];
         int count = 0;
         for (int i = 0; i < logs.Count; i++)
             count += logSnapshots[i].Count;
         for (int j = 0; j < count; j++)
         {
             int earliestIndex = -1;
             long earliestTime = long.MaxValue;
             for (int i = 0; i < logs.Count; i++)
             {
                 ThreadLogSnapshot logSnapshot = logSnapshots[i];
                 int index = indices[i];
                 if (index >= logSnapshot.Count)
                     continue;
                 long time = logSnapshot[index].time;
                 if (time < earliestTime)
                 {
                     earliestIndex = i;
                     earliestTime = time;
                 }
             }
             ThreadLogEntry entry = logSnapshots[earliestIndex][indices[earliestIndex]];
             double timeInMilliseconds = (entry.time * 1000) / (double)frequency;
             writer.Write(timeInMilliseconds);
             for (int i = 0; i < logs.Count; i++)
             {
                 writer.Write(", ");
                 if (i == earliestIndex)
                 {
                     writer.Write('\"');
                     writer.Write(entry.operation);
                     writer.Write('\"');
                 }
             }
             writer.WriteLine();
             indices[earliestIndex]++;
         }
     }
 }
        static void WriteLogFile()
        {
            Trace("ThreadTrace.Save");
            TextWriter writer = File.CreateText(logFileName);

            using (writer)
            {
                ThreadLogSnapshot[] logSnapshots = new ThreadLogSnapshot[logs.Count];
                writer.Write("Time");
                for (int i = 0; i < logs.Count; i++)
                {
                    logSnapshots[i] = logs[i].GetSnapshot();
                    writer.Write(", Thread ");
                    writer.Write(i.ToString());
                }
                writer.WriteLine();
                writer.Write("(Ms)");
                foreach (ThreadLog log in logs)
                {
                    if (log.IsThreadPoolThread)
                    {
                        writer.Write(", (ThreadPool)");
                    }
                    else if (log.IsBackgroundThread)
                    {
                        writer.Write(", (Background)");
                    }
                    else
                    {
                        writer.Write(", (Main)");
                    }
                }
                writer.WriteLine();
                int[] indices = new int[logs.Count];
                int   count   = 0;
                for (int i = 0; i < logs.Count; i++)
                {
                    count += logSnapshots[i].Count;
                }
                for (int j = 0; j < count; j++)
                {
                    int  earliestIndex = -1;
                    long earliestTime  = long.MaxValue;
                    for (int i = 0; i < logs.Count; i++)
                    {
                        ThreadLogSnapshot logSnapshot = logSnapshots[i];
                        int index = indices[i];
                        if (index >= logSnapshot.Count)
                        {
                            continue;
                        }
                        long time = logSnapshot[index].time;
                        if (time < earliestTime)
                        {
                            earliestIndex = i;
                            earliestTime  = time;
                        }
                    }
                    ThreadLogEntry entry = logSnapshots[earliestIndex][indices[earliestIndex]];
                    double         timeInMilliseconds = (entry.time * 1000) / (double)frequency;
                    writer.Write(timeInMilliseconds);
                    for (int i = 0; i < logs.Count; i++)
                    {
                        writer.Write(", ");
                        if (i == earliestIndex)
                        {
                            writer.Write('\"');
                            writer.Write(entry.operation);
                            writer.Write('\"');
                        }
                    }
                    writer.WriteLine();
                    indices[earliestIndex]++;
                }
            }
        }