提交 cd6e490c 编写于 作者: S Sam Harwell

Report allocated bytes for AnalyzerRunner

上级 732751bb
......@@ -51,7 +51,7 @@ public async Task RunAsync(Workspace workspace, CancellationToken cancellationTo
}
var solution = workspace.CurrentSolution;
var stopwatch = Stopwatch.StartNew();
var stopwatch = PerformanceTracker.StartNew();
var updatedSolution = solution;
......
......@@ -45,12 +45,12 @@ public async Task RunAsync(Workspace workspace, CancellationToken cancellationTo
}
var solution = workspace.CurrentSolution;
var stopwatch = Stopwatch.StartNew();
var stopwatch = PerformanceTracker.StartNew();
var analysisResult = await GetAnalysisResultAsync(solution, _analyzers, _options, cancellationToken).ConfigureAwait(false);
var allDiagnostics = analysisResult.Where(pair => pair.Value != null).SelectMany(pair => pair.Value.GetAllDiagnostics()).ToImmutableArray();
Console.WriteLine($"Found {allDiagnostics.Length} diagnostics in {stopwatch.ElapsedMilliseconds}ms");
Console.WriteLine($"Found {allDiagnostics.Length} diagnostics in {stopwatch.GetSummary(preciseMemory: true)}");
WriteTelemetry(analysisResult);
if (_options.TestDocuments)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
namespace AnalyzerRunner
{
internal sealed class PerformanceTracker
{
private readonly Stopwatch _stopwatch;
#if NETCOREAPP
private readonly long _initialTotalAllocatedBytes;
#endif
public PerformanceTracker(Stopwatch stopwatch, long initialTotalAllocatedBytes)
{
#if NETCOREAPP
_initialTotalAllocatedBytes = initialTotalAllocatedBytes;
#endif
_stopwatch = stopwatch;
}
public static PerformanceTracker StartNew(bool preciseMemory = true)
{
#if NETCOREAPP
var initialTotalAllocatedBytes = GC.GetTotalAllocatedBytes(preciseMemory);
#else
var initialTotalAllocatedBytes = 0L;
#endif
return new PerformanceTracker(Stopwatch.StartNew(), initialTotalAllocatedBytes);
}
public TimeSpan Elapsed => _stopwatch.Elapsed;
public string GetSummary(bool preciseMemory = true)
{
#if NETCOREAPP
var elapsedTime = Elapsed;
var allocatedBytes = GC.GetTotalAllocatedBytes(preciseMemory) - _initialTotalAllocatedBytes;
return $"{elapsedTime.TotalMilliseconds:0}ms ({allocatedBytes} bytes allocated)";
#else
return $"{Elapsed.TotalMilliseconds:0}ms";
#endif
}
}
}
......@@ -77,7 +77,7 @@ public static async Task Main(string[] args)
ProfileOptimization.SetProfileRoot(options.ProfileRoot);
}
Stopwatch stopwatch = Stopwatch.StartNew();
var stopwatch = PerformanceTracker.StartNew();
var properties = new Dictionary<string, string>
{
#if NETCOREAPP
......@@ -105,10 +105,12 @@ public static async Task Main(string[] args)
solution = solution.WithProjectAnalyzerReferences(projectId, ImmutableArray<AnalyzerReference>.Empty);
}
Console.WriteLine($"Loaded solution in {stopwatch.ElapsedMilliseconds}ms");
Console.WriteLine($"Loaded solution in {stopwatch.GetSummary(preciseMemory: true)}");
if (options.ShowStats)
{
stopwatch = PerformanceTracker.StartNew();
List<Project> projects = solution.Projects.Where(project => project.Language == LanguageNames.CSharp || project.Language == LanguageNames.VisualBasic).ToList();
Console.WriteLine("Number of projects:\t\t" + projects.Count);
......@@ -119,6 +121,8 @@ public static async Task Main(string[] args)
Console.WriteLine("Number of syntax nodes:\t\t" + statistics.NumberofNodes);
Console.WriteLine("Number of syntax tokens:\t" + statistics.NumberOfTokens);
Console.WriteLine("Number of syntax trivia:\t" + statistics.NumberOfTrivia);
Console.WriteLine($"Statistics gathered in {stopwatch.GetSummary(preciseMemory: true)}");
}
if (options.ShowCompilerDiagnostics)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册