PERF.MSH001
Read/Write Enabled on a model keeps a duplicate copy of its mesh data
Read/Write Enabled on a model importer keeps the mesh’s vertex and index data accessible from script after upload, which means a CPU-side copy is retained alongside the GPU one. For a project with a lot of geometry, that copy is one of the larger avoidable items in a memory capture.
What the scan looks at
Model importers under Assets/ with isReadable enabled. It’s a per-model import setting, so the finding points at the FBX/OBJ, not at individual meshes inside it.
Why it costs you
The GPU copy is what renders. The CPU copy exists so scripts can read mesh.vertices, mesh.triangles, mesh.uv, write to them, or call mesh.RecalculateNormals(). Unity will also need it for a handful of engine paths — some NavMesh and collision-mesh workflows, and mesh data read back on the fly.
If none of that happens to a given model, the second copy is resident for the life of the scene and shipped in the build.
How to fix it by hand
In the model’s Import Settings, under the Model tab, untick Read/Write Enabled, then reimport. Before that, check whether anything reads the mesh:
// These need Read/Write Enabled on the source model:
mesh.vertices; mesh.triangles; mesh.uv; mesh.colors;
mesh.SetVertices(...); mesh.RecalculateNormals(); mesh.CombineMeshes(...);
Procedural deformation, runtime mesh slicing, and some third-party tools (mesh combiners, LOD generators, decal systems) genuinely need it. Note that Unity 2019.3+ defaults this to off for new imports, so the models that have it on are usually legacy or came from a package.
What PerfLint does about it
The finding lists each model with the flag on, and Pro can clear it from the row — import setting, reversible, Unity reimports.
The thing that catches people out
If a memory capture shows Mesh memory dominated by “Combined Mesh” entries, this rule is not your lever — that’s Static Batching baking merged copies of your geometry, and it’s a separate finding: PERF.SBATCH001. We got that diagnosis wrong once ourselves before splitting the two apart; the write-up is here.
Check your own project. The scan is free, runs entirely on your machine, and reports this rule with the exact assets that trip it — nothing is uploaded.
Last reviewed · All rules