Jump to content

Is there a troubleshooting checklist for slow performance?


Recommended Posts

A search for "Slow performance" finds dozens of conversations on this forum. There seems to be many causes for slowness. We occasionally have a slow file in our office and we can't figure out why. I'm wondering if anyone has put together a checklist of common causes. Our current slow-poke brings up the spinning beach ball curser (Mac OS) when switching between plan and perspective views, using "Rotate Plan", turning design layers on or off, choosing a different sheet layer, updating VPs and exporting PDFs. I tend to check things like sheet layer resolution and rendering settings when VPs are slow to update and PDFs are slow to generate. I don't know where to look for causes of slow view changes. Any thoughts would be greatly appreciated. If nobody has such a checklist I might attempt to assemble one. Would it be a futile effort because there are too many possible variables? Would a checklist for Mac users be different than one for Windows users?

 

Thanks,

Ed

Link to comment

I should clarify that the problems we have with slow performance are file-specific. It's not happening in all of our projects. It appears that there must be something inside the slow files that causes the problem. The troubleshooting checklist I hope to find (or create) would investigate problems within the file; not hardware deficiencies.

 

Link to comment

Thank you @Jesse Cogswell that's a really useful script! Works on objects inside Groups + symbols too - excellent!

 

24 minutes ago, Jesse Cogswell said:

I should also say that VW gets really grumpy when you create an extrude or sweep that is made up of more than one object.  It will totally let you do it, but your performance will take a significant hit depending on how many objects are in the extrude / sweep and how many of those extrudes are in the drawing. 

 

I didn't know this that's good to know. I rarely extrude multiple objects at once but when I have done I think I probably imagined the opposite: that this was somehow more efficient than having them as separate extrudes. Chances are I would have ungrouped it anyway as I didn't want it combined as a single extrude for other reasons but good to know!

 

Going back to the script, which lines would I remove if I wanted to throw all caution to the wind + dispense with the major alert? Would I simply delete this part?:

 

BEGIN
    IF(YNDialog('This removes all solid modelling history in drawing and cannot be undone.  Continue?')) THEN ForEachObject(ConvertSolid,(INSYMBOL & (T=SOLIDCSG)));
END;

 

Or better still how would I edit it to instead have it as a minor alert on the status bar that didn't require clicking 'Yes' to proceed?

 

Thanks!

Link to comment

Ok this is with the major alert removed:

 

PROCEDURE ConvertAllToGenSolid;

{*	Converts all Solid Addition, Solid Subtraction, Fillet, and Chamfer objects into Generic Solids	*}
	
PROCEDURE ConvertSolid(h:HANDLE);

	VAR

		solidHd:HANDLE;

	BEGIN
		solidHd:=CnvrtToGenericSolid(h);
	
END;

BEGIN
ForEachObject(ConvertSolid,(INSYMBOL & (T=SOLIDCSG)));
END;

Run(ConvertAllToGenSolid);

 

Can I do it without two BEGIN + ENDs? I tried + got an error message...

Link to comment

@Tom W. Unfortunately, because the CnvrtToGenericSolid function returns a handle, it requires being given its own procedure since ForEachObject ONLY works with a procedure taking a single handle argument, so CnvrtToGenericSolid being a function returning a handle doesn't work.  If CnvrtToGenericSolid didn't need have the return value, the script could be a single line: ForEachObject(CnvrtToGenericSolid,(INSYMBOL & (T=SOLIDCSG)));

  • Like 1
Link to comment

@Tom W. What do you want the minor alert to say?

 

To add a minor alert saying "All object history has been cleared", the code would look like this using the AlertInform procedure:

 

PROCEDURE ConvertAllToGenSolid;

{*	Converts all Solid Addition, Solid Subtraction, Fillet, and Chamfer objects into Generic Solids	*}
	
PROCEDURE ConvertSolid(h:HANDLE);

	VAR

		solidHd:HANDLE;

	BEGIN
		solidHd:=CnvrtToGenericSolid(h);
	END;

BEGIN
	IF(YNDialog('This removes all solid modelling history in drawing and cannot be undone.  Continue?')) THEN ForEachObject(ConvertSolid,(INSYMBOL & (T=SOLIDCSG)));
    
	AlertInform('All object history has been cleared','',TRUE);
END;

Run(ConvertAllToGenSolid);

 

Edited by Jesse Cogswell
  • Like 2
Link to comment
1 hour ago, Tom W. said:

I rarely extrude multiple objects at once but when I have done I think I probably imagined the opposite: that this was somehow more efficient than having them as separate extrudes. Chances are I would have ungrouped it anyway as I didn't want it combined as a single extrude for other reasons but good to know!

 

For me these also work pretty well - as long as inside VW.

(And used in Layer Plane Orientation only !)

You keep all 2D comfort Tools.

 

I use them a lot!

E.g. for ribbon/band (?) windows :

(I do not use the curtain wall tool, as being slow, clumsy, ...

and I do not like to insert "Walls" into Walls ...)

I use a Standard VW Window over the whole size/width and

add the Posts by an Extrude of multiple Rectangles.

 

You can easily copy them from Story to Story.

They can cover all Facades at once.

They can be easily aligned to building grid

Array/Align/Modify the posts easily in 2D in Edit Mode.

You can basically array them over the whole grid and they will mostly

only be visible where needed, in the Openings of the Windows ....

And they are treated as a single Object (Solid)

 

The bad side,

Solids that contain more than a single Volume, like independent Volumes,

which you can easily get in VW by other operations too,

do not correctly export to DWG and will come in as silly non welded 3D Faces.

No problem for the CW Posts example, as these are all separate and do not touch

each other - this way you can easily stitch them in DWG later.

 

BTW

Something which is not possible when you e.g. have (full length) corner Windows

in Mitered Walls connections - and Walls end up in 2 separate Volumes, touching

the other Walls separate Volumes ....

So the inability of VW, to export Solids containing independent Volumes to DWG,

which also knows such "multi"-Solids, and has even tools to separate them if needed,

is a great DWG exchange problem for me in general.

(Beside not exporting Materials !!!)

 

 

And the other bad side,

I think what @Jesse Cogswell meant,

if you create such Extrudes - containing multiple 2D objects in a XZ or YZ orientation,

they will go crazy in Edit Mode pretty easily and fast.

And generally, best to do not even try to move, copy or rotate or never even mirror them !!!11!

Edited by zoomer
  • Like 2
Link to comment

You're a star @Jesse Cogswell thanks so much.

So in 

AlertInform('All object history has been cleared','',TRUE); 

what exactly is the 

'',

part doing?

Before you stepped in to put me out of my misery I did try:

AlertInform('All object history has been cleared',TRUE); 

which was on the right track but missing the crucial single quotes...

It really is time I tried to read up on this.

 

And thanks for explaining in the other post why (I think) the script requires two Begin/End sections.

Link to comment

@Tom W. The extra set of single quotes is what VW calls "Advice" when displaying a major alert.

 

image.png.fc72a75725dec2a86fa8d74577aa4568.png

 

 

I know that you're interested in scripting, but I cannot stress how important the Function Reference is when doing so.  If I am writing a script, even one as simple as what I posted above, I have this open on another display.  I've been writing scripts in VW for 12 years and still refer to it constantly.  Personally, I prefer the offline reference found in the VWHelp directory in the application folder, but both the offline or online (linked above) are incredibly valuable tools.

image.thumb.png.e80c96ed9f0087b70c23171c7cfae1c8.png

 

 

  • Like 2
Link to comment
1 minute ago, Jesse Cogswell said:

@Tom W. The extra set of single quotes is what VW calls "Advice" when displaying a major alert.

 

image.png.fc72a75725dec2a86fa8d74577aa4568.png

 

 

I know that you're interested in scripting, but I cannot stress how important the Function Reference is when doing so.  If I am writing a script, even one as simple as what I posted above, I have this open on another display.  I've been writing scripts in VW for 12 years and still refer to it constantly.  Personally, I prefer the offline reference found in the VWHelp directory in the application folder, but both the offline or online (linked above) are incredibly valuable tools.

image.thumb.png.e80c96ed9f0087b70c23171c7cfae1c8.png

 

 

 

Thank you that explains it perfectly!

 

I have seen you + others say the same elsewhere re consulting the Function Reference so I can't blame it on ignorance, I think I just needed to see the process in action to ram it home to me which is precisely what you've done. If I'd looked I would probably have twigged that two strings are required not one... Next time!

 

Can you help me find the offline Function Reference in the VWHelp folder? I can only see lots of (mainly) html files...

e.g.

2027999907_Screenshot2023-04-15at20_21_01.thumb.png.39fadc634f3161a1afa5ce6475006f9d.png

Am I in the right place?

Thanks.

 

  • Like 1
Link to comment
2 hours ago, Jesse Cogswell said:
{*	Converts all Solid Addition, Solid Subtraction, Fillet, and Chamfer objects into Generic Solids	*}

 

@Jesse Cogswell is there a way to add Extrudes to the list...? I tried adding (T=Xtrd) but it didn't work - in fact it stopped (T=SOLIDCSG) from working so was doubly ineffective... Thank you

Link to comment

Very short lesson on Criteria.

 

ForEachObject uses Criteria (as do worksheet database rows and numerous other VS commands) to determine which object to perform the operation on.

 

The Criteria that Jesse setup up is:

 

(INSYMBOL & (T=SOLIDCSG))

 

You can combine together different criteria by using and AND (&) fuction   (use all the rectangle who have a fill color of Red).  Or you can use and OR (|) function [which is what you did not find in your attempt to edit the criteria above. (use  all the object that are in Class-1 OR Class-2.

 

You then need to make sure you group the criteria using parentheses to get the function you want.

 

InSymbol means to also execute on objects that are included in a symbol definition as well as objects that are in the drawing.

 

What you need for your consideration is:

 

Use all the Object that have a type of CGS Solid OR a type of Extrude AND are on either the drawing or in a symbol definition.

 

I come up with:

 

(INSYMBOL & ((T=XTRD) | (T=SOLIDCSG)))

 

Insymbol always needs to go first (or at least the criteria builder always  puts it first.

 

Note the extra parentheses.  I have parens around each of the T= blocks and then also around the group of the two of them. This make it into a single item.  The vertical bar in the middle mean to OR them together  (Type is XTRD OR Type is SolidCGS). 

 

So each individual criteria needs parens around it, the total criteria needs parens around the outside. And then you need extra parens to "group" the criteria so you can get the proper And and OR functionality.

 

When you just added the extra & T=XTRD, you were telling VW to use only the objects whose type is XTRD AND type is SolidCSG.  Which is exactly zero items in the entire Vectorworks universe.

 

HTH

  • Like 1
Link to comment
3 minutes ago, Pat Stanford said:

Very short lesson on Criteria.

 

ForEachObject uses Criteria (as do worksheet database rows and numerous other VS commands) to determine which object to perform the operation on.

 

The Criteria that Jesse setup up is:

 

(INSYMBOL & (T=SOLIDCSG))

 

You can combine together different criteria by using and AND (&) fuction   (use all the rectangle who have a fill color of Red).  Or you can use and OR (|) function [which is what you did not find in your attempt to edit the criteria above. (use  all the object that are in Class-1 OR Class-2.

 

You then need to make sure you group the criteria using parentheses to get the function you want.

 

InSymbol means to also execute on objects that are included in a symbol definition as well as objects that are in the drawing.

 

What you need for your consideration is:

 

Use all the Object that have a type of CGS Solid OR a type of Extrude AND are on either the drawing or in a symbol definition.

 

I come up with:

 

(INSYMBOL & ((T=XTRD) | (T=SOLIDCSG)))

 

Insymbol always needs to go first (or at least the criteria builder always  puts it first.

 

Note the extra parentheses.  I have parens around each of the T= blocks and then also around the group of the two of them. This make it into a single item.  The vertical bar in the middle mean to OR them together  (Type is XTRD OR Type is SolidCGS). 

 

So each individual criteria needs parens around it, the total criteria needs parens around the outside. And then you need extra parens to "group" the criteria so you can get the proper And and OR functionality.

 

When you just added the extra & T=XTRD, you were telling VW to use only the objects whose type is XTRD AND type is SolidCSG.  Which is exactly zero items in the entire Vectorworks universe.

 

HTH

 

Thank you @Pat Stanford yes @Jesse Cogswell DM'd me to say the same (DM because I was hijacking @Ed Wachter's thread - which I'm now doing again 🙂). I kicked myself because even I should have figured that out. But these are all very useful lessons in not being intimidated by VS + I appreciate you both steering me in the right direction. Time now to do some background research + stop using up all my Forum credits on simple questions 🙂

 

BTW the script works great. I have it as menu command on right-click document context menu

1803729629_Screenshot2023-04-16at17_23_25.thumb.png.839603617b26efeb5896504cbd1fa3e8.png

Link to comment

Wow, yes, that's a lot to digest. Maybe my tread's been hijacked but you're adding at least one item to my troubleshooting checklist: "Check for complex 3D objects, and consider converting them to generic solids". The file that's currently bothering does contain a complex 3D model (that my boss created). I'll start looking inside for offending objects.

 

I will also need to look at other threads on this forum to learn how to use the script that @Jesse Cogswell created.

 

I still wonder if it's really possible to come up with a useful checklist. Are there so many variables that it becomes a fool's errand?

 

Thanks,

Ed

 

 

Link to comment

@Ed Wachter Thoughts, and a few more slowdown items:

 

Objects with lots of faces/vertices

  • Imported geometry.  Other software often creates objects, esp 3d objects, with huge face and vertex count, esp meshes.  These might come from manufacturers, 3d Warehouse, other offices with custom models, etc.  Some likely suspects are plants, tubs/toilets/faucets, vehicles, railings, fasteners, even landscape contours (from dwg) can have way more vertices than needed etc.  Some Revit objects might look like walls, windows, etc, but ungroup to find a stack of meshes, one for each component in each wall.  Open suspect objects a separate vwx file, examine for complexity and if needed simplify or recreate with native vwx tools. Sometimes, convert to Generic Solid is all that's needed.  Then bring the simpler object into vwx.  Careful not to add the "heavy" ones into the office library.
  • vwx native objects - Many have several modes or levels of detail.  A drawing or viewport full of bolts or screws with threads showing will crawl along compared to same drawing with the fasteners set to "no threads". 
  • Duplicate objects should be converted to symbols. Symbol instances redraw faster than same count of source objects.  2d and 3d.

Drawing status strategy - lower settings for work, higher for output

  • vwx Preferences for 2d and 3d conversion resolution can slow things when set to high or very high.  A strategy for a slow file might be to draw and test render in lower settings, then switch to higher setting for output.  At least you only wait at the last step.
  • Document Setting>Document prefs - go through the tabs and look for the tradeoffs - Eg Display tab, enabling caches speeds up drawing, but increases file size. Resolution tab choices can speed up screen redraws at expense of detail level (work at low, elevate for output)
  • Sheet layer detail and quality can be adjusted down for work and render tests, then elevated for output.
  • Render mode - Shaded adjust the detail/quality. Use the built in styles and the Custom options. Reduced quality for faster tests, higher for output.
  • more

Large area or distant geography 

  • Objects far from origin, even isolated unused ones with everything else near the origin, can slow and otherwise mess up a file. Find and eliminate errant elements in imported (eg dwg) files - a single text block or a little extrude miles from origin can corrupt a whole drawing.
  • Learn file referencing  - eg work on each house in its own separate file. Reference them into a larger site drawing.  The host file might be slower because bigger, but work on the individual house files can be snappy.
  • Learn georeferencing - this makes sense of those dwg imports that are miles from the default vwx origin. As long as whole team is using same CRS and guide points, subsequent export to dwg or shp should then coincide with the source location/geometry.

Project progress

         A project may grow a tree of classes, layers, reference files, library items, etc as design progresses.  At some point much of the early stuff is no longer relevant, eg issue points or other project milestones.  Duplicate the whole project folder at start of each new milestone.   Archive the older one. In the new set, cull all unneeded items. The layer, class, reference, library, etc should start to decrease in count and size. The files in the smaller project should get more responsive.

 

A comprehensive list of slow drawing culprits could be possible but probably will always be out of date.

 

-B

 

 

  • Like 4
Link to comment
2 hours ago, Ed Wachter said:

I still wonder if it's really possible to come up with a useful checklist. Are there so many variables that it becomes a fool's errand?

 

The big 4 for my people...

 

Stuff far from the origin like @Benson Shaw said.

Site models built from contours that have way too many verticies, learn to model from points or clean up the contours prior to turning them into a site model

Using native objects with too much detail (Laubwerks plants, etc...)

Having too many object snaps active in a complex drawing, learn to turn them off and activate only as needed.

 

Of these, most would be surprised how quickly things improve in the worst of drawings the moment you turn all your snaps off.

  • Like 3
Link to comment

@Benson Shaw that looks like the beginning of good troubleshooting checklist. I'll get back to work on that project in a couple days. I will check through the items on your list as well as looking for the most complex 3D objects. The file does contain two buildings and a large site model, although the file size seems small for us (about 200MB) although it will grow as the project progresses further. 

 

I'll update this thread as I spend more time in that file.

 

Thanks,

Ed

  • Like 1
Link to comment
21 minutes ago, Ed Wachter said:

...and a large site model

 

These can be more impactful than you might think, depending on how they are composed and located (like far from the origin).

 

File size really doesn't matter, I've had files that are 1 GB or more that spin around in 3D silky smooth.

I've also had files that were under 100 MB that would bring a computer to its knees.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...