Faster json document guid replacement during "Save as" #15835
+71
−12
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Purpose
All the graph item guids are replaced when Dynamo does a Save As. This function previously searched for all occurences of guid-like strings in the file, and replaced them with a new guid, by doing a string.Replace for each guid. This gets extremely slow when there are a lot of objects in the graph.
This new version does a single iteration through the json string, replacing guids as it finds them, which means this scales much better with larger amounts of graph data.
Performance
On the Car_Configurator.dyn file, this PR changes file save time from approximately 2m20s to 5s on my machine. On the MaRS file, it goes from about 15s down to less than 5s. The remaining time is completely dominated by the update to the Recent Files ObservableCollection, which this PR does not touch.
Old version using string.Replace.

New version.

Declarations
Check these if you believe they are true
*.resx
filesRelease Notes
N/A
Reviewers
@mjkkirschner
FYIs
@dimven