diff options
author | Marius Ungureanu <therzok@gmail.com> | 2017-05-11 19:50:12 +0300 |
---|---|---|
committer | Marius Ungureanu <teromario@yahoo.com> | 2017-05-12 17:05:51 +0300 |
commit | ab7ec81e0fa627968601c8dc1e62964ec6c095bd (patch) | |
tree | 3d293c6c51e9872631028c8c49e4c278fc59058a /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor | |
parent | 885d29f5181bee6988ab2b061ce38aa3e5ae2365 (diff) |
[Ide] Avoid iterators on iterating textchanges.
This showed up pretty high on List<T> enumerator allocations.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/Projection.cs | 3 | ||||
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/SegmentTree.cs | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/Projection.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/Projection.cs index a68ca66352..2b1e227480 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/Projection.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/Projection/Projection.cs @@ -117,7 +117,8 @@ namespace MonoDevelop.Ide.Editor.Projection void HandleTextChanging (object sender, TextChangeEventArgs e) { - foreach (var change in e.TextChanges) { + for (int i = 0; i < e.TextChanges.Count; ++i) { + var change = e.TextChanges[i]; foreach (var segment in originalProjections) { if (segment.Contains (change.Offset)) { var projectedOffset = change.Offset - segment.Offset + segment.LinkedTo.Offset; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/SegmentTree.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/SegmentTree.cs index 81c4d8790f..1895919b68 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/SegmentTree.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/SegmentTree.cs @@ -169,7 +169,8 @@ namespace MonoDevelop.Ide.Editor internal void UpdateOnTextReplace (object sender, TextChangeEventArgs e) { - foreach (var change in e.TextChanges) { + for (int i = 0; i < e.TextChanges.Count; ++i) { + var change = e.TextChanges[i]; if (change.RemovalLength == 0) { var length = change.InsertionLength; foreach (var segment in GetSegmentsAt (change.Offset).Where (s => s.Offset < change.Offset && change.Offset < s.EndOffset)) { |