You 're right, this can be a performance issue. Now, this make me think that filtering and strategy features should not be enabled by default in the abstract class. These should be defined ideally in separated traits that custom class inherit from (or implement themselves) to enable them. In this case, the default used hydrator in ZDG, the ArraySerializable hydrator is a more light and behave exactly then the native ArrayObject (no filtering, nor strategy, by default)

The pb now is that this change is a BC break, I think we can let it as is for now and refactor it for the 3.0 version with decoupling and performance in mind