Example #1
0
        public PerformanceReport(PerformanceSnapshot firstSnapshot, PerformanceSnapshot secondSnapshot)
        {
            var sn2Index = secondSnapshot.ProcessList.Where(x => x.ProcessId != 0).ToDictionary(x => x.ProcessId);
            var reports  = new List <ProcessReport>();

            foreach (var p1 in firstSnapshot.ProcessList)
            {
                if (!sn2Index.ContainsKey(p1.ProcessId))
                {
                    continue;
                }
                var p2 = sn2Index[p1.ProcessId];

                var cpuUsage = (p2.PercentProcessorTime - p1.PercentProcessorTime) /
                               (double)(p2.Timestamp - p1.Timestamp) / Environment.ProcessorCount * 100.0;

                var sd = new ProcessReport();
                sd.ProcessId            = p2.ProcessId;
                sd.Name                 = p2.ProcessName;
                sd.PercentProcessorTime = cpuUsage;
                reports.Add(sd);
            }

            ProcessList = reports;
        }
Example #2
0
        private void Measure()
        {
            var connection = new SQLiteConnection("Data Source=" + DbFile);

            connection.Open();

            try
            {
                using (var transaction = connection.BeginTransaction())
                {
                    var cmd = new SQLiteCommand(connection);
                    cmd.CommandText = "INSERT INTO Measurements (TimeStamp) VALUES (@TimeStamp)";
                    cmd.Parameters.AddWithValue("@TimeStamp", DateTime.Now);
                    cmd.ExecuteNonQuery();
                    var measurementId = connection.LastInsertRowId;

                    var snapshot1 = new PerformanceSnapshot();
                    Thread.Sleep(1000);
                    var snapshot2 = new PerformanceSnapshot();
                    var report    = new PerformanceReport(snapshot1, snapshot2);

                    foreach (var process in report.ProcessList)
                    {
                        cmd             = new SQLiteCommand(connection);
                        cmd.CommandText =
                            "INSERT INTO ProcessDetails (MeasurementId, ProcessId, ProcessName, ProcessorTime) VALUES (@MeasurementId, @ProcessId, @ProcessName, @ProcessorTime)";
                        cmd.Parameters.AddWithValue("@MeasurementId", measurementId);
                        cmd.Parameters.AddWithValue("@ProcessId", process.ProcessId);
                        cmd.Parameters.AddWithValue("@ProcessName", process.Name);
                        cmd.Parameters.AddWithValue("@ProcessorTime", process.PercentProcessorTime);
                        cmd.ExecuteNonQuery();
                        RecordCount++;
                    }

                    MeasurementCount++;
                    transaction.Commit();
                }
            }
            finally
            {
                connection.Close();
                connection.Dispose();
            }

            FileSize = new FileInfo(DbFile).Length;
        }