diff --git a/src/ORM/DataObject.php b/src/ORM/DataObject.php index 25e8c345b..5a06c5c1c 100644 --- a/src/ORM/DataObject.php +++ b/src/ORM/DataObject.php @@ -329,6 +329,14 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity */ private static $cascade_duplicates = []; + /** + * Used to cache the schema to prevent repeatedly fetching the singleton + * While this is a fast operation, in some scenarios getSchema() is called an extremely large number of times + * + * @internal + */ + private static ?DataObjectSchema $schema = null; + /** * Get schema object * @@ -336,7 +344,10 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity */ public static function getSchema() { - return Injector::inst()->get(DataObjectSchema::class); + if (is_null(self::$schema)) { + self::$schema = Injector::inst()->get(DataObjectSchema::class); + } + return self::$schema; } /**