Edit 7th Oct 2019 - replaced link at bottom.
Please note, the results below are only available when rendered using OpenGL. (Top left of window --> 'Render')
When topology or even inconvenience becomes a nuisance factor or hurdle, the inviso effect in Blender can often save the day. (See below)
The project - several hundred holes are to be inserted into a slab of 'concrete'.
Make the slab, get it's texture etc settled. Then make just one cylinder. When there's a large number of cylinders, and the view isn't going to be up too close, reduce the walls to about 8.
Texture the sides to match the material they're to go through.
Assign the cylinder ends a separate material slot and set the opacity to 0.008, both speculars to 0. (main and transparency specular sliders.
Organise the ends to become inviso surfaces and make sure they don't render the cyl walls invisible.
If they do, it's bound to be both end and side geometry in the cylinder holding each other's material slot in the Outliner panel. Get rid of any strips in there that don't belong.
When the cylinder can be peered through and still see it's sides, but not the slab of concrete, the inviso factor is working ok.
Insert the cylinder EXACTLY as required with the minimum amount protruding through the slab's surfaces.
Check that the cylinder has indeed become a 'hole' drilled right through the slab.
When all is ok, apply an array modifier to the cylinder. Duplicate the result and patterns as required.
The slab's topography has been left alone, so whatever is down the track shouldn't mind the presence of inviso holes because slab modifiers etc, wouldn't see them. Real holes however could pose a problem, particularly when they are large in number.
The full explanation has overwhelmed one at least, but in a nutshell set the surface's speculars to zero and the Opacity to 0.008. Deslect all with A to see it working. The Inviso's Transparency box (properties panel) in the "Display" tab may have to be ticked or unticked as explained in the "Thesis". You may also have to temporarily parent the cube to the cylinder in order to get it to peer through the cube. Unparent it again immediately and remove any strips in the Outliner panel that don't belong to the cube or cylinder. (Material links particularly)
How to put a mask into 3d space