CodeTimer provides an easy way to add timing code to procedure-style methods. It provides visibility into the contribution of individual code segments within the method.
The following image shows a snippet from a Log which has both AppInsights and CodeTimer running.
AppInsights does the job of identifying the cost of the method while CodeTimer logs a cost breakdown for individual segments within the method.
Read more about why you would use CodeTimer in this article.
Nuget
Install-Package codetimer
dotnet CLI
dotnet add package codetimer
Creates a new CodeTimer, passing in a logger and specifying the expected ceiling time for the timing operation.
var codeTimer = new CodeTimer.CodeTimer("GetDetailsView", localLogger)
{
ExpectedMilliseconds = 1200
};
Call Mark() after to measure the performance cost of individual blocks to help identify which parts of a method are the most expensive.
public List<Blah> DoSomething() {
var timer = new CodeTimer("DoSomething", localLogger)
{
ExpectedMilliseconds = 1200
};
var data = MakeDatabaseCall();
timer.Mark("Get initial data");
myWebService.CallSomething(data.Id);
timer.Mark("Updated backend service");
var coll = new List<Blah>();
foreach(var foo in data.Bars) {
coll.Add(foo.Blah);
}
timer.Mark("Created list of Blah's");
// Stops the timer and logs the result
// Logs as Error if (Success == false)
timer.Complete();
return coll;
}
The CodeTimer has a pluggable formatter for returning results and which is used to write to Logs if an ILogger is passed in to the constructor.
The example below displays an example result which is returned by the default Formatter.
var codeTimer = new CodeTimer("Case1", localLogger)
{
ExpectedMilliseconds = 1200
};
// Do something
codeTimer.Mark("Start"); // 400ms
// Do another thing
codeTimer.Mark("Middle"); // 800ms
// Do last thing
codeTimer.Mark("End"); // 1200ms
codeTimer.Complete(); // 1201ms
Console.WriteLine(codeTimer.GetFormattedResult())
// Displays
Case1 timer failed. Ran for 1201ms. Expected 1000ms
- Start: 400ms
- Middle: 800ms
- End: 1200ms
Darren Neimke – @digory
Distributed under the MIT license. See LICENSE
for more information.
https://github.com/dneimke/code-timer/blob/master/LICENSE
- Fork it (https://github.com/yourname/yourproject/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request