This Dynamo definition seems to work on small files but when you get to a typical building size it stalls. Any suggestions would be great. Dynamo - Framing Cleanup_NEW
Regarding the actual change of materials, I would guess that the slow-down is more from the Revit side, than the Dynamo side and there is nothing much you can do about that.
Maybe the only two things you can do on the dynamo side of things to negate some of the slowdowns are:
instead of converting your instances to families, filtering that and converting it to instances again, try to filter the instances straight away? Is there a way you can distinguish the steel components from the concrete components just by the instance name?
instead of re-applying the material on every single instance (a very taxing procedure in Revit), filter out the ones which already have the correct material and apply it only to the instances with the wrong material.