If you can target a platform that supports residency sets, e.g. iOS18+or equivalent, you can further optimize resource usage by making resources "resident" ahead of time, as opposed to after you commit the command buffer(which is the case when calling a command encoder's methods). It also allows you to keep resources resident indefinitely, as well as making allocations, or multiple resources, resident all at the same time. This will reduce the CPU overhead, especially if you have a lot of resources. Combined with argument buffers and heaps the overhead can be cut substantially.
Apple documentations on residency sets