AcDbDatabase::reclaimMemoryFromErasedObjects

Managing Your AutoCAD®/RealDWG® Model Memory
Footprint for Better Performance
Bill Adkison
MarinCAD Software Engineering
CP4286-U
November 29, 2011
© 2011 Autodesk
Unconference Topic Suggestions

Topics You All have in Mind





Fragmentation
Large 3d models
Managing dependencies
.NET vs. ARX/Native vs LISP
Topics Bill has in Mind







The End of the 32-bit Era (almost)
DWG Database Memory Overhead
Differing Memory Characteristics of different AutoCAD Visual Styles
Use of AcDbDatabase::reclaimMemoryFromErasedObjects(AcDbObjectIdArray)
The Advantages and Disadvantages of Disabling UNDO recording
XData versus AcDbObject::extensionDictionary
One-Shot allocation of Huge Arrays
© 2011 Autodesk
Fragmentation, Large Models


32-bit OS: 2Gb or 3Gb limit is the real ceiling, but ragmentation within that space
in the process will slow down performance before the final limit
Even on 64-bit systems, ACAD going over ~6Mb starts slowing down a lot

Large Models:

PartialOpen with index structures is a good way to filter DWG content and memory
 Use INDEXCTL to create spatial and layer index structures
 Partition DWGs into Xrefs with Demand Loading
 XREF Clipping (XCLIP)
© 2011 Autodesk
.NET vs Native ARX vs LISP



.NET is usually not a memory hog, unless you open a lot of objects
simultaneously
LISP is a LOT of overhead, but can be useful anyway for prototyping.
VLX (building a compiled LISP app) is a good way to eliminate a lot of overhead
© 2011 Autodesk
End of 32-Bit PC Era (almost)

Migrating to x64 is good short term, and long term solution

32-bit apps on x64 OS can save some memory, some performance cost

AutoCAD doesn’t support x86 on x64OS, but it can be done with registry hacks (email me
for details, I have to learn them for a client anyway).
© 2011 Autodesk
AcDbDatabase Object consumption

Big DWGs commonly have:

~10^4 - 10^6 entities (i.e. 99% of the memory)

~10^3 – 10^5 Symbol Table Records and XDict entries (still big, but not the typical
problem)

Overhead of:

16 - 32 bytes per handle/ObjectId + GS Spatial Index
 96 - 128 bytes per Entity Common Fields
 200 - >1Mb bytes per Entity
© 2011 Autodesk
Different AutoCAD Visual Styles

2D or not 2D, That Really is the Main Question

All non-2DWireframe modes have a common 3d GS
2D is good for:





Others are good for:



Model graphs with unshared nodes and static 3D viewing.
Legacy appearance (relatively uncommon, but significant)
Session with heavy document locking processing (3D Gs triggers often)
Model Graphs with shared and/or dynamic 3D viewing
Advanced rendering modes
Mem Diff: SharedNodeDwg (1024 refs to 1 block): 2D – 1.2Gb == 3D
© 2011 Autodesk
AcDbDatabase::reclaimMemoryFromErasedObjects

Intended for scenarios repeatedly adding/erasing entities.

~16 bytes residual per entity, out of 200b – 2Mb per entity

Slightly better with UNDO disabled, but not much
© 2011 Autodesk
Disabling UNDO/REDO

Very Safe by Command Line
 Not Very Effective for “common” operations with efficient UNDO recording

Very Dangerous by API
 Disabling for specific database ops Must be self-contained
© 2011 Autodesk
XDATA vs extensionDictionary/XRECORD

XDATA has lower overhead, about 48 bytes, plus 32 bytes per RegApp
section, then very efficient. But a 16Kb limit for XDATA per object, and you
need to share with other apps.
 extensionDictionary is about 100 bytes of overhead, plus 100 bytes per
added object. But after that, there are no capacity limits other than file size
and memory size.
© 2011 Autodesk
Autodesk, AutoCAD* [*if/when mentioned in the pertinent material, followed by an alphabetical list of all other trademarks mentioned in the material] are registered trademarks or trademarks of Autodesk, Inc., and/or its subsidiaries and/or affiliates in the USA and/or other countries. All other brand names, product names, or trademarks belong to their respective holders. Autodesk reserves the right to alter product and
services offerings, and specifications and pricing at any time without notice, and is not responsible for typographical or graphical errors that may appear in this document. © 2011 Autodesk, Inc. All rights reserved.
© 2011 Autodesk