Skip to content

Analyzer: Introduce an analyzer to recommend the more efficient string splitting features in .NET 8 #85487

Open

Description

@geeknoid

Introduce a performance-centric analyzer that detects uses of String.Split and recommends the new more efficient string splitting functionality from MemoryExtensions. I'm not sure a fixer can be provided here, it might be too complicated for that. But having an analyzer to point out an obvious place that can get a perf boost is still useful.

Category : Performance
Severity : Info

Activity

  1. ghost added
    untriagedNew issue has not been triaged by the area owner
    on Apr 27, 2023
  2. ghost added
    needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
    on Apr 27, 2023
  3. added
    code-analyzerMarks an issue that suggests a Roslyn analyzer
    and removed
    needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
    on Apr 27, 2023
  4. added
    api-suggestionEarly API idea and discussion, it is NOT ready for implementation
    partner-impactThis issue impacts a partner who needs to be kept updated
    on May 17, 2023
  5. added this to the 8.0.0 milestone on May 17, 2023
  6. ghost removed
    untriagedNew issue has not been triaged by the area owner
    on May 17, 2023
  7. buyaa-n commented on May 25, 2023

    @buyaa-n
    Contributor

    [Triage note]: We shouldn't flag for all string.Split cases, need to look for patterns where the new API could be used. Based on the pattern a fixer will be offered. When #934 implemented we could replace more string.Split cases

    Category : Performance
    Severity : Info

    Question:

    • What pattern the analyzer should look for?

    • We might also want to flag String.Trim, String.TrimEnt, String.TrimStart and suggest new Trim, TrimEnd, TrimStart from MemoryExtensions. Maybe with different ID as these could have code-fixers.

  8. added
    api-ready-for-reviewAPI is ready for review, it is NOT ready for implementation
    and removed
    api-suggestionEarly API idea and discussion, it is NOT ready for implementation
    on May 30, 2023
  9. bartonjs commented on Jun 1, 2023

    @bartonjs
    Member

    Video

    Out of a concern of false positives, it seems like the initial version of this analyzer should be limited to those callsites where a count was passed into string.Split, as that pattern has a perfect analogue in the span-based split.

    Using uncounted string.Split in a foreach would be better handled by an iterator-based split (which we don't have yet). Other uses of uncounted split might be analyzable, but they're harder to describe, so they should probably be a different diagnostic ID (once the pattern can be analyzed) just to keep the docs/explanation sane.

    The suggestion regarding Trim/TrimEnd/TrimStart may have merit, but seems like it might need some more thought (as it depends heavily on what happens after the call to Trim)... and should be addressed in a separate issue, with more details/examples.

    Category: Performance
    Severity: Info

  10. added
    api-approvedAPI was approved in API review, it can be implemented
    and removed
    api-ready-for-reviewAPI is ready for review, it is NOT ready for implementation
    on Jun 1, 2023
  11. added
    help wanted[up-for-grabs] Good issue for external contributors
    on Jun 1, 2023
  12. modified the milestones: 8.0.0, Future on Jul 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-approvedAPI was approved in API review, it can be implementedarea-System.Runtimecode-analyzerMarks an issue that suggests a Roslyn analyzerhelp wanted[up-for-grabs] Good issue for external contributorspartner-impactThis issue impacts a partner who needs to be kept updated

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions