We have seen problems with Multi-part paths (MPPs) with lots of contacts. The larger we make this path, the more contacts the MPP has to maintain, the slower things ran in our session. We finally ended up writing some wrapper code for flattening MPPs. We determined that ultimately we wanted our symbolic contacts placed instead of the sub-rectangles of an MPP, so when we flatten the MPP, we replace the rectangles with symbolic instances. We then decided that since our flatten code does this automatically, we modified our large MPPs to no longer have sub-rectangles in them. We use a temp layer and draw it as a sub path in the MPP. We can still stretch and chop the MPP as usual. When we flatten the MPP later on, we convert the temp layer to contact instances. Stretching and reshaping an MPP with 8 to 10 sub-paths is much more efficient than dealing with thousands of sub-rectangles. In general, we found that all of Cadences ROD objects add a performance hit (we used to use a lot of these in our pcells). The ROD objects are useful, but sometimes you have to use them sparingly so you can take advantage of the features only when it is needed.