Skip to content

Commit ebcef7f

Browse files
Update perf notes based on a 35k line file
Roslyn's src\Compilers\VisualBasic\Portable\Generated\Syntax.xml.Syntax.Generated.vb
1 parent 1c9b4d3 commit ebcef7f

3 files changed

Lines changed: 3 additions & 5 deletions

File tree

ICSharpCode.CodeConverter/CSharp/VisualBasicConverter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public static async Task<SyntaxNode> ConvertCompilationTree(Document document,
3333
var converted = (CSS.CompilationUnitSyntax)await root.AcceptAsync(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor);
3434

3535
try {
36+
// This call is very expensive for large documents. Should look for a more performant version, e.g. Is NormalizeWhitespace good enough?
3637
converted = (CSS.CompilationUnitSyntax)Formatter.Format(converted, document.Project.Solution.Workspace);
3738
return LineTriviaMapper.MapSourceTriviaToTarget(root, converted);
3839
} catch (Exception) { //TODO log

ICSharpCode.CodeConverter/Shared/LineTriviaMapper.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ internal class LineTriviaMapper
2121
private readonly List<SyntaxTriviaList> _trailingTriviaCarriedOver = new List<SyntaxTriviaList>();
2222
private readonly Dictionary<SyntaxToken, (List<IReadOnlyCollection<SyntaxTrivia>> Leading, List<IReadOnlyCollection<SyntaxTrivia>> Trailing)> _targetTokenToTrivia = new Dictionary<SyntaxToken, (List<IReadOnlyCollection<SyntaxTrivia>>, List<IReadOnlyCollection<SyntaxTrivia>>)>();
2323

24-
public LineTriviaMapper(SyntaxNode source, TextLineCollection sourceLines, SyntaxNode target, TextLineCollection targetLines, Dictionary<int, TextLine> targetLeadingTextLineFromSourceLine, Dictionary<int, TextLine> targetTrailingTextLineFromSourceLine)
24+
private LineTriviaMapper(SyntaxNode source, TextLineCollection sourceLines, SyntaxNode target, TextLineCollection targetLines, Dictionary<int, TextLine> targetLeadingTextLineFromSourceLine, Dictionary<int, TextLine> targetTrailingTextLineFromSourceLine)
2525
{
2626
_source = source;
2727
_sourceLines = sourceLines;
@@ -69,10 +69,6 @@ private static int GetPosition((SyntaxNodeOrToken Node, int SourceLineIndex, str
6969
).ToLookup(n => n.SourceLineIndex, n => n);
7070
}
7171

72-
/// <remarks>
73-
/// Possible future improvements:
74-
/// * Performance: Probably faster to find tokens starting from position of last replaced token rather than from the root node each time
75-
/// </remarks>
7672
private SyntaxNode GetTargetWithSourceTrivia()
7773
{
7874
// Reverse iterate to ensure trivia never ends up after the place it came from (consider #if directive or opening brace of method)

ICSharpCode.CodeConverter/VB/CSharpConverter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public static async Task<SyntaxNode> ConvertCompilationTree(Document document,
3939
var converted = (VBSyntax.CompilationUnitSyntax)root.Accept(visualBasicSyntaxVisitor.TriviaConvertingVisitor);
4040

4141
try {
42+
// This call is very expensive for large documents. Should look for a more performant version, e.g. Is NormalizeWhitespace good enough?
4243
converted = (VBSyntax.CompilationUnitSyntax)Formatter.Format(converted, document.Project.Solution.Workspace);
4344
return LineTriviaMapper.MapSourceTriviaToTarget(root, converted);
4445
} catch (Exception) { //TODO log

0 commit comments

Comments
 (0)