A few studies:
A file containing 1,000 walls exported as arbitrary profile extrusions, versus the same 1,000 walls exported as IFC4 tessellated meshes both result in 1,736kb. But let's break it down for you to draw your own conclusions:
For those curious, this is a tesselated mesh box (9 SLOC, 497 bytes - can be made as funky as you want) - note how buildingSMART retains the indexed polygonal face as a separate entity, if merged into the face set, it could be made a lot more efficient:
#15=IFCINDEXEDPOLYGONALFACE((2,1,4,5));
#16=IFCINDEXEDPOLYGONALFACE((1,2,8,3));
#17=IFCINDEXEDPOLYGONALFACE((1,3,6,4));
#18=IFCINDEXEDPOLYGONALFACE((4,6,7,5));
#19=IFCINDEXEDPOLYGONALFACE((3,8,7,6));
#20=IFCINDEXEDPOLYGONALFACE((8,2,5,7));
#21=IFCCARTESIANPOINTLIST3D(((265.,4.,0.),(265.,6.,0.),(277.,4.,0.),(265.,4.,2.),(265.,6.,2.),(277.,4.,2.),(277.,6.,2.),(277.,6.,0.)));
#22=IFCPOLYGONALFACESET(#21,$,(#15,#16,#17,#18,#19,#20),$);
#23=IFCSHAPEREPRESENTATION(#10,'Body','Tessellation',(#22));
Theoretically if buildingSMART decided they wanted to give some love to meshes, it could turn into this (3 SLOC, 292 bytes):
#21=IFCCARTESIANPOINTLIST3D(((265.,4.,0.),(265.,6.,0.),(277.,4.,0.),(265.,4.,2.),(265.,6.,2.),(277.,4.,2.),(277.,6.,2.),(277.,6.,0.)));
#22=IFCPOLYGONALFACESET(#21,$,((2,1,4,5),(1,2,8,3),(1,3,6,4),(4,6,7,5),(3,8,7,6),(8,2,5,7)),$);
#23=IFCSHAPEREPRESENTATION(#10,'Body','Tessellation',(#22));
Arbitrary closed profile def (13 SLOC, 484 bytes, ~36 bytes per added vertex - limited to a simple extrusion):
#15=IFCCARTESIANPOINT((-6.,-1.));
#16=IFCCARTESIANPOINT((6.,-1.));
#17=IFCCARTESIANPOINT((6.,1.));
#18=IFCCARTESIANPOINT((-6.,1.));
#19=IFCPOLYLINE((#15,#16,#17,#18,#15));
#20=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,$,#19);
#21=IFCCARTESIANPOINT((5.,0.,0.));
#22=IFCDIRECTION((0.,0.,1.));
#23=IFCDIRECTION((1.,0.,0.));
#24=IFCAXIS2PLACEMENT3D(#21,#22,#23);
#25=IFCDIRECTION((0.,0.,1.));
#26=IFCEXTRUDEDAREASOLID(#20,#24,#25,2.);
#27=IFCSHAPEREPRESENTATION(#10,'Body','SweptSolid',(#26));
Rectangle profile def (8 SLOC, 311 bytes - limited to rectangles only):
#15=IFCRECTANGLEPROFILEDEF(.AREA.,$,$,12.,2.);
#16=IFCCARTESIANPOINT((5.,0.,0.));
#17=IFCDIRECTION((0.,0.,1.));
#18=IFCDIRECTION((1.,0.,0.));
#19=IFCAXIS2PLACEMENT3D(#16,#17,#18);
#20=IFCDIRECTION((0.,0.,1.));
#21=IFCEXTRUDEDAREASOLID(#15,#19,#20,2.);
#22=IFCSHAPEREPRESENTATION(#10,'Body','SweptSolid',(#21));
Note that for disciplines that use pipes or rebar, or really any circular extrusion, this test does not apply, and a parametric extrusion is definitely the way to go.
For bespoke shapes - it's kind of a half-and-half, it's hard to say, and really depends on the shape. It should be considered case by case, and use the best tool for the job.
