/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Tools/IdeCoreBenchmarks/ProjectOperationBenchmarks.cs
116 строк
4 KB
Youssef1313
Enable CA1052 (static holder types should be static)
01 дек 2024, 15:59
01 дек 2024, 15:59
bffc54b
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Linq; using System.Text; using BenchmarkDotNet.Attributes; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Text; namespace IdeCoreBenchmarks { public static class ProjectOperationBenchmarks { private static readonly SourceText s_newText = SourceText.From("text"); [MemoryDiagnoser] public class IterateDocuments { private Workspace _workspace; private Project _emptyProject; private Project _hundredProject; private Project _thousandsProject; public IterateDocuments() { // These fields are initialized in GlobalSetup _workspace = null!; _emptyProject = null!; _hundredProject = null!; _thousandsProject = null!; } [Params(0, 100, 10000)] public int DocumentCount { get; set; } private Project Project { get { return DocumentCount switch { 0 => _emptyProject, 100 => _hundredProject, 10000 => _thousandsProject, _ => throw new NotSupportedException($"'{nameof(DocumentCount)}' is out of range"), }; } } [GlobalSetup] public void GlobalSetup() { _workspace = new AdhocWorkspace(); var solution = _workspace.CurrentSolution; _emptyProject = CreateProject(ref solution, name: "A", documentCount: 0); _hundredProject = CreateProject(ref solution, name: "A", documentCount: 100); _thousandsProject = CreateProject(ref solution, name: "A", documentCount: 10000); static Project CreateProject(ref Solution solution, string name, int documentCount) { var projectId = ProjectId.CreateNewId(name); solution = solution.AddProject(projectId, name, name, LanguageNames.CSharp); var emptySourceText = SourceText.From("", Encoding.UTF8); for (var i = 0; i < documentCount; i++) { var documentName = $"{i}.cs"; var documentId = DocumentId.CreateNewId(projectId, documentName); solution = solution.AddDocument(documentId, documentName, emptySourceText); } return solution.GetRequiredProject(projectId); } } [Benchmark(Description = "Project.DocumentIds")] public int DocumentIds() { var count = 0; foreach (var _ in Project.DocumentIds) { count++; } return count; } [Benchmark(Description = "Project.Documents")] public int Documents() { var count = 0; foreach (var _ in Project.Documents) { count++; } return count; } [Benchmark(Description = "Solution.WithDocumentText")] public void WithDocumentText() { var solution = Project.Solution; var documentId = Project.DocumentIds.FirstOrDefault(); if (documentId != null) { var _ = solution.WithDocumentText(documentId, s_newText); } } } } }