Skip to content

Commit 7213119

Browse files
committed
perf: disposed umanaged resource
1 parent 7037204 commit 7213119

File tree

6 files changed

+146
-12
lines changed

6 files changed

+146
-12
lines changed

source/RevitDevTool/Visualization/Server/BoundingBoxVisualizationServer.cs

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
9090
var isTransparentPass = DrawContext.IsTransparentPass();
9191
if ((isTransparentPass && _transparency > 0) || (!isTransparentPass && _transparency == 0))
9292
{
93-
foreach (var surfaceBuffer in _surfaceBuffers.Where(b=>b.IsValid()))
93+
foreach (var surfaceBuffer in _surfaceBuffers)
9494
{
9595
DrawContext.FlushBuffer(surfaceBuffer.VertexBuffer,
9696
surfaceBuffer.VertexBufferCount,
@@ -105,7 +105,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
105105

106106
if (_drawEdge && _edgeBuffers.Count != 0)
107107
{
108-
foreach (var edgeBuffer in _edgeBuffers.Where(b=>b.IsValid()))
108+
foreach (var edgeBuffer in _edgeBuffers)
109109
{
110110
DrawContext.FlushBuffer(edgeBuffer.VertexBuffer,
111111
edgeBuffer.VertexBufferCount,
@@ -143,6 +143,19 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
143143

144144
private void MapGeometryBuffer()
145145
{
146+
foreach (var buffer in _surfaceBuffers)
147+
{
148+
buffer.Dispose();
149+
}
150+
151+
foreach (var buffer in _edgeBuffers)
152+
{
153+
buffer.Dispose();
154+
}
155+
156+
_surfaceBuffers.Clear();
157+
_edgeBuffers.Clear();
158+
146159
if (VisualizeGeometries.Count == 0) return;
147160

148161
try
@@ -168,8 +181,12 @@ private void MapGeometryBuffer()
168181

169182
private void MapAxisBuffers()
170183
{
171-
//_axisBuffers.Clear();
172-
184+
foreach (var buffer in _axisBuffers)
185+
{
186+
buffer.Dispose();
187+
}
188+
_axisBuffers.Clear();
189+
173190
foreach (var box in VisualizeGeometries)
174191
{
175192
var minPoint = box.Transform.OfPoint(box.Min);
@@ -188,8 +205,9 @@ private void MapAxisBuffers()
188205
RenderHelper.MapNormalVectorBuffer(minBuffer, minPoint - UnitVector * Context.Application.ShortCurveTolerance, normal, axisLength);
189206
RenderHelper.MapNormalVectorBuffer(maxBuffer, maxPoint + UnitVector * Context.Application.ShortCurveTolerance, -normal, axisLength);
190207

191-
_axisBuffers.AddRange(axisBuffer);
192208
}
209+
210+
_axisBuffers.AddRange(axisBuffer);
193211
}
194212
}
195213

@@ -217,6 +235,21 @@ private void UpdateEffects()
217235

218236
protected override void DisposeBuffers()
219237
{
238+
foreach (var buffer in _surfaceBuffers)
239+
{
240+
buffer.Dispose();
241+
}
242+
243+
foreach (var buffer in _edgeBuffers)
244+
{
245+
buffer.Dispose();
246+
}
247+
248+
foreach (var buffer in _axisBuffers)
249+
{
250+
buffer.Dispose();
251+
}
252+
220253
_surfaceBuffers.Clear();
221254
_edgeBuffers.Clear();
222255
_axisBuffers.Clear();

source/RevitDevTool/Visualization/Server/FaceVisualizationServer.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
9393
var isTransparentPass = DrawContext.IsTransparentPass();
9494
if ((isTransparentPass && _transparency > 0) || (!isTransparentPass && _transparency == 0))
9595
{
96-
foreach (var surfaceBuffer in _surfaceBuffers.Where(b=>b.IsValid()))
96+
foreach (var surfaceBuffer in _surfaceBuffers)
9797
{
9898
DrawContext.FlushBuffer(surfaceBuffer.VertexBuffer,
9999
surfaceBuffer.VertexBufferCount,
@@ -108,7 +108,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
108108

109109
if (_drawMeshGrid && _meshGridBuffers.Count != 0)
110110
{
111-
foreach (var meshGridBuffer in _meshGridBuffers.Where(b => b.IsValid()))
111+
foreach (var meshGridBuffer in _meshGridBuffers)
112112
{
113113
DrawContext.FlushBuffer(meshGridBuffer.VertexBuffer,
114114
meshGridBuffer.VertexBufferCount,
@@ -122,7 +122,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
122122

123123
if (_drawNormalVector && _normalBuffers.Count != 0)
124124
{
125-
foreach (var normalBuffer in _normalBuffers.Where(b => b.IsValid()))
125+
foreach (var normalBuffer in _normalBuffers)
126126
{
127127
DrawContext.FlushBuffer(normalBuffer.VertexBuffer,
128128
normalBuffer.VertexBufferCount,
@@ -143,6 +143,8 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
143143

144144
private void MapGeometryBuffer()
145145
{
146+
DisposeBuffers();
147+
146148
if (VisualizeGeometries.Count == 0) return;
147149

148150
try
@@ -198,6 +200,21 @@ private void UpdateEffects()
198200

199201
protected override void DisposeBuffers()
200202
{
203+
foreach (var buffer in _surfaceBuffers)
204+
{
205+
buffer.Dispose();
206+
}
207+
208+
foreach (var buffer in _meshGridBuffers)
209+
{
210+
buffer.Dispose();
211+
}
212+
213+
foreach (var buffer in _normalBuffers)
214+
{
215+
buffer.Dispose();
216+
}
217+
201218
_surfaceBuffers.Clear();
202219
_meshGridBuffers.Clear();
203220
_normalBuffers.Clear();

source/RevitDevTool/Visualization/Server/MeshVisualizationServer.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
122122

123123
private void MapGeometryBuffer()
124124
{
125+
foreach (var buffer in _surfaceBuffers)
126+
{
127+
buffer.Dispose();
128+
}
129+
130+
foreach (var buffer in _meshGridBuffers)
131+
{
132+
buffer.Dispose();
133+
}
134+
135+
_surfaceBuffers.Clear();
136+
_meshGridBuffers.Clear();
137+
125138
if (VisualizeGeometries.Count == 0) return;
126139

127140
try
@@ -147,6 +160,12 @@ private void MapGeometryBuffer()
147160

148161
private void MapNormalsBuffer()
149162
{
163+
foreach (var buffer in _normalBuffers.SelectMany(bufferArray => bufferArray))
164+
{
165+
buffer.Dispose();
166+
}
167+
_normalBuffers.Clear();
168+
150169
foreach (var mesh in VisualizeGeometries)
151170
{
152171
var area = RenderGeometryHelper.ComputeMeshSurfaceArea(mesh);
@@ -162,8 +181,9 @@ private void MapNormalsBuffer()
162181

163182
RenderHelper.MapNormalVectorBuffer(buffer, vertex + normal * (offset + _extrusion), normal, normalLength);
164183
normals = normals.Append(buffer).ToArray();
165-
_normalBuffers.Add(normals);
166184
}
185+
186+
_normalBuffers.Add(normals);
167187
}
168188
}
169189

@@ -194,6 +214,21 @@ private void UpdateEffects()
194214

195215
protected override void DisposeBuffers()
196216
{
217+
foreach (var buffer in _surfaceBuffers)
218+
{
219+
buffer.Dispose();
220+
}
221+
222+
foreach (var buffer in _meshGridBuffers)
223+
{
224+
buffer.Dispose();
225+
}
226+
227+
foreach (var buffer in _normalBuffers.SelectMany(bufferArray => bufferArray))
228+
{
229+
buffer.Dispose();
230+
}
231+
197232
_surfaceBuffers.Clear();
198233
_meshGridBuffers.Clear();
199234
_normalBuffers.Clear();

source/RevitDevTool/Visualization/Server/PolylineVisualizationServer.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
6262
if (_drawSurface && _surfaceBuffers.Count != 0)
6363
{
6464
var isTransparentPass = DrawContext.IsTransparentPass();
65-
if (isTransparentPass && _transparency > 0 || !isTransparentPass && _transparency == 0)
65+
if ((isTransparentPass && _transparency > 0) || (!isTransparentPass && _transparency == 0))
6666
{
6767
foreach (var surfaceBuffer in _surfaceBuffers)
6868
{
@@ -117,6 +117,19 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
117117

118118
private void MapGeometryBuffer()
119119
{
120+
foreach (var buffer in _surfaceBuffers)
121+
{
122+
buffer.Dispose();
123+
}
124+
125+
foreach (var buffer in _curveBuffers)
126+
{
127+
buffer.Dispose();
128+
}
129+
130+
_surfaceBuffers.Clear();
131+
_curveBuffers.Clear();
132+
120133
if (VisualizeGeometries.Count == 0) return;
121134

122135
try
@@ -150,6 +163,13 @@ private void MapGeometryBuffer()
150163

151164
private void MapDirectionsBuffer()
152165
{
166+
foreach (var buffer in _normalsBuffers)
167+
{
168+
buffer.Dispose();
169+
}
170+
171+
_normalsBuffers.Clear();
172+
153173
if (VisualizeGeometries.Count == 0) return;
154174

155175
foreach (var visualizeGeometry in VisualizeGeometries)
@@ -225,6 +245,21 @@ private void UpdateEffects()
225245

226246
protected override void DisposeBuffers()
227247
{
248+
foreach (var buffer in _surfaceBuffers)
249+
{
250+
buffer.Dispose();
251+
}
252+
253+
foreach (var buffer in _curveBuffers)
254+
{
255+
buffer.Dispose();
256+
}
257+
258+
foreach (var buffer in _normalsBuffers)
259+
{
260+
buffer.Dispose();
261+
}
262+
228263
_surfaceBuffers.Clear();
229264
_curveBuffers.Clear();
230265
_normalsBuffers.Clear();

source/RevitDevTool/Visualization/Server/SolidVisualizationServer.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
8282
var isTransparentPass = DrawContext.IsTransparentPass();
8383
if ((isTransparentPass && _transparency > 0) || (!isTransparentPass && _transparency == 0))
8484
{
85-
foreach (var buffer in _faceBuffers.Where(b=>b.IsValid()))
85+
foreach (var buffer in _faceBuffers)
8686
{
8787
DrawContext.FlushBuffer(buffer.VertexBuffer,
8888
buffer.VertexBufferCount,
@@ -97,7 +97,7 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
9797

9898
if (_drawEdge)
9999
{
100-
foreach (var buffer in _edgeBuffers.Where(b => b.IsValid()))
100+
foreach (var buffer in _edgeBuffers)
101101
{
102102
DrawContext.FlushBuffer(buffer.VertexBuffer,
103103
buffer.VertexBufferCount,
@@ -118,6 +118,8 @@ public override void RenderScene(Autodesk.Revit.DB.View view, DisplayStyle displ
118118

119119
private void MapGeometryBuffer()
120120
{
121+
DisposeBuffers();
122+
121123
foreach (var solid in VisualizeGeometries)
122124
{
123125
var scaledSolid = RenderGeometryHelper.ScaleSolid(solid, _scale);
@@ -168,6 +170,16 @@ private void UpdateEffects()
168170

169171
protected override void DisposeBuffers()
170172
{
173+
foreach (var buffer in _faceBuffers)
174+
{
175+
buffer.Dispose();
176+
}
177+
178+
foreach (var buffer in _edgeBuffers)
179+
{
180+
buffer.Dispose();
181+
}
182+
171183
_faceBuffers.Clear();
172184
_edgeBuffers.Clear();
173185
}

source/RevitDevTool/Visualization/Server/XyzVisualizationServer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ private static void RenderAxisBuffer(RenderingBufferStorage buffer)
135135

136136
private void UpdateGeometryBuffer()
137137
{
138+
DisposeBuffers();
139+
138140
if (VisualizeGeometries.Count == 0) return;
139141

140142
try

0 commit comments

Comments
 (0)