void Process() { Dictionary <string, List <PerfInfo> > rows = new Dictionary <string, List <PerfInfo> >(); using (StreamReader reader = new StreamReader(filename)) { string line = reader.ReadLine(); while (line != null) { PerfInfo info = ParsePerfInfo(line); if (info != null) { List <PerfInfo> list; if (!rows.TryGetValue(info.file, out list)) { list = new List <PerfInfo>(); rows[info.file] = list; } list.Add(info); } line = reader.ReadLine(); } } foreach (string key in keys) { outStream.Write("," + key.Substring(9)); } outStream.WriteLine(); List <string> files = new List <string>(rows.Keys); files.Sort(); foreach (string file in files) { List <PerfInfo> list = rows[file]; outStream.Write(file); foreach (string key in keys) { foreach (var item in list) { if (item.step == key) { outStream.Write("," + item.duration); break; } } } outStream.WriteLine(); } if (outfile != null) { using (outStream) { outStream.Close(); } } }
public void Tick() { if (Visible) { return; } //memory.SetText("Memory " + (int) (System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64 / 1024f) + " KB"); //memory.SetText("Public Memory " + (int)(GC.GetTotalMemory(false) / 1024f) + " KB"); visibility.SetText(CameraVisibility.TilesVisible() + " Tiles visible"); if (Window.GlobalTick % 10 != 0) { return; } var tps = PerfInfo.AverageTPS(); tick.SetColor(getColor(tps, Settings.UpdatesPerSecond)); tick.SetText("Tick " + tps.ToString("F1") + " @ " + PerfInfo.TMS.ToString("00") + " ms"); var frameCount = Settings.FrameLimiter == 0 ? ScreenInfo.ScreenRefreshRate : Settings.FrameLimiter; var fps = PerfInfo.AverageFPS(); render.SetColor(getColor(fps, frameCount)); render.SetText("Render " + fps.ToString("F1") + " @ " + PerfInfo.FMS.ToString("00") + " ms"); }
void AddPerfInfo(string name, DateTime start, IDictionary <string, PerfInfo> perf_table) { PerfInfo pi; if (!perf_table.TryGetValue(name, out pi)) { pi = new PerfInfo(); perf_table [name] = pi; } pi.Time += DateTime.Now - start; pi.NumberOfCalls++; }
private void StartProfiling() { try { Cursor = Cursors.WaitCursor; m_perf.Clear(); m_first = null; m_prev = null; if (m_ProfilingState == ProfilingStateEnum.psPaused) { ResumeProfiling(); return; } if (m_Conn != null && m_Conn.State == ConnectionState.Open) { m_Conn.Close(); } InitGridColumns(); m_EventCount = 0; m_Conn = GetConnection(); m_Conn.Open(); m_Rdr = new RawTraceReader(m_Conn); m_Rdr.CreateTrace(); if (true) { if (m_currentsettings.EventsColumns.LoginLogout) { m_Rdr.SetEvent(ProfilerEvents.SecurityAudit.AuditLogin, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime ); m_Rdr.SetEvent(ProfilerEvents.SecurityAudit.AuditLogout, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.LoginName, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.ExistingConnection) { m_Rdr.SetEvent(ProfilerEvents.Sessions.ExistingConnection, ProfilerEventColumns.TextData, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.BatchCompleted) { m_Rdr.SetEvent(ProfilerEvents.TSQL.SQLBatchCompleted, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime, ProfilerEventColumns.DatabaseName, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.BatchStarting) { m_Rdr.SetEvent(ProfilerEvents.TSQL.SQLBatchStarting, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime, ProfilerEventColumns.DatabaseName, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.RPCStarting) { m_Rdr.SetEvent(ProfilerEvents.StoredProcedures.RPCStarting, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime, ProfilerEventColumns.DatabaseName, ProfilerEventColumns.ObjectName, ProfilerEventColumns.ApplicationName ); } } if (m_currentsettings.EventsColumns.RPCCompleted) { m_Rdr.SetEvent(ProfilerEvents.StoredProcedures.RPCCompleted, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID , ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime , ProfilerEventColumns.DatabaseName , ProfilerEventColumns.ObjectName , ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.SPStmtCompleted) { m_Rdr.SetEvent(ProfilerEvents.StoredProcedures.SPStmtCompleted, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID , ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime , ProfilerEventColumns.DatabaseName , ProfilerEventColumns.ObjectName , ProfilerEventColumns.ObjectID , ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.SPStmtStarting) { m_Rdr.SetEvent(ProfilerEvents.StoredProcedures.SPStmtStarting, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID , ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime , ProfilerEventColumns.DatabaseName , ProfilerEventColumns.ObjectName , ProfilerEventColumns.ObjectID , ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.UserErrorMessage) { m_Rdr.SetEvent(ProfilerEvents.ErrorsAndWarnings.UserErrorMessage, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.DatabaseName, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.BlockedProcessPeport) { m_Rdr.SetEvent(ProfilerEvents.ErrorsAndWarnings.Blockedprocessreport, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.SPID, ProfilerEventColumns.StartTime, ProfilerEventColumns.DatabaseName, ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.SQLStmtStarting) { m_Rdr.SetEvent(ProfilerEvents.TSQL.SQLStmtStarting, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID , ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime , ProfilerEventColumns.DatabaseName , ProfilerEventColumns.ApplicationName ); } if (m_currentsettings.EventsColumns.SQLStmtCompleted) { m_Rdr.SetEvent(ProfilerEvents.TSQL.SQLStmtCompleted, ProfilerEventColumns.TextData, ProfilerEventColumns.LoginName, ProfilerEventColumns.CPU, ProfilerEventColumns.Reads, ProfilerEventColumns.Writes, ProfilerEventColumns.Duration, ProfilerEventColumns.SPID , ProfilerEventColumns.StartTime, ProfilerEventColumns.EndTime , ProfilerEventColumns.DatabaseName , ProfilerEventColumns.ApplicationName ); } if (null != m_currentsettings.Filters.Duration) { SetIntFilter(m_currentsettings.Filters.Duration * 1000, m_currentsettings.Filters.DurationFilterCondition, ProfilerEventColumns.Duration); } SetIntFilter(m_currentsettings.Filters.Reads, m_currentsettings.Filters.ReadsFilterCondition, ProfilerEventColumns.Reads); SetIntFilter(m_currentsettings.Filters.Writes, m_currentsettings.Filters.WritesFilterCondition, ProfilerEventColumns.Writes); SetIntFilter(m_currentsettings.Filters.CPU, m_currentsettings.Filters.CpuFilterCondition, ProfilerEventColumns.CPU); SetIntFilter(m_currentsettings.Filters.SPID, m_currentsettings.Filters.SPIDFilterCondition, ProfilerEventColumns.SPID); SetStringFilter(m_currentsettings.Filters.LoginName, m_currentsettings.Filters.LoginNameFilterCondition, ProfilerEventColumns.LoginName); SetStringFilter(m_currentsettings.Filters.DatabaseName, m_currentsettings.Filters.DatabaseNameFilterCondition, ProfilerEventColumns.DatabaseName); SetStringFilter(m_currentsettings.Filters.TextData, m_currentsettings.Filters.TextDataFilterCondition, ProfilerEventColumns.TextData); SetStringFilter(m_currentsettings.Filters.ApplicationName, m_currentsettings.Filters.ApplicationNameFilterCondition, ProfilerEventColumns.ApplicationName); m_Cmd.Connection = m_Conn; m_Cmd.CommandTimeout = 0; m_Rdr.SetFilter(ProfilerEventColumns.ApplicationName, LogicalOperators.AND, ComparisonOperators.NotLike, "Express Profiler"); m_Cached.Clear(); m_events.Clear(); m_itembysql.Clear(); lvEvents.VirtualListSize = 0; StartProfilerThread(); m_servername = edServer.Text; m_username = edUser.Text; Properties.Settings.Default.ServerName = m_servername; Properties.Settings.Default.UserName = tbAuth.SelectedIndex == 0 ? "" : m_username; Properties.Settings.Default.Save(); } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { UpdateButtons(); Cursor = Cursors.Default; } }
private void timer1_Tick(object sender, EventArgs e) { Queue<ProfilerEvent> saved; Exception exc; lock (this) { saved = m_events; m_events = new Queue<ProfilerEvent>(10); exc = m_profilerexception; m_profilerexception = null; } if (null != exc) { using (ThreadExceptionDialog dlg = new ThreadExceptionDialog(exc)) { dlg.ShowDialog(); } } lock (m_Cached) { while (0 != saved.Count) { NewEventArrived(saved.Dequeue(), 0 == saved.Count); } if (m_Cached.Count > m_currentsettings.Filters.MaximumEventCount) { while (m_Cached.Count > m_currentsettings.Filters.MaximumEventCount) { m_Cached.RemoveAt(0); } lvEvents.VirtualListSize = m_Cached.Count; lvEvents.Invalidate(); } if ((null == m_prev) || (DateTime.Now.Subtract(m_prev.m_date).TotalSeconds >= 1)) { PerfInfo curr = new PerfInfo { m_count = m_EventCount }; if (m_perf.Count >= 60) { m_first = m_perf.Dequeue(); } if (null == m_first) m_first = curr; if (null == m_prev) m_prev = curr; DateTime now = DateTime.Now; double d1 = now.Subtract(m_prev.m_date).TotalSeconds; double d2 = now.Subtract(m_first.m_date).TotalSeconds; slEPS.Text = String.Format("{0} / {1} EPS(last/avg for {2} second(s))", (Math.Abs(d1 - 0) > 0.001 ? ((curr.m_count - m_prev.m_count) / d1).ToString("#,0.00") : ""), (Math.Abs(d2 - 0) > 0.001 ? ((curr.m_count - m_first.m_count) / d2).ToString("#,0.00") : ""), d2.ToString("0")); m_perf.Enqueue(curr); m_prev = curr; } } }