perf: eliminate all runtime managed-string allocation (delete ReadShortAscii)
The encode/send paths no longer build a managed string at runtime — name matching is done entirely by the engine's stable name char* + byte-compare. - NativeUtil.NameEquals(char*, byte[]): NUL-terminated byte compare, no alloc. - ProxyRegistry: registered names stored as UTF8 byte[] (once, at cold Register); matched by serializer/field name POINTER with pointer-keyed caches (HasSerializerPtr / TryGetByPtr). ProxyField.Name reuses the registration's own string — no new string built per field. - EncodeCapture stores the serializer name pointer (not a string). - PerClientDispatch + the Windows index map are keyed by name pointer. - Encoder classification byte-compares the registry entry name vs known-name byte[] (no string at load). - ReadOriginal leaves String/ByteArray Original empty (materializing a live string value would allocate on the encode path). - Deleted: ReadShortAscii, ResolveName, ReadFieldName, the interned-name cache, and the dead legacy _byName uniform API (SetInt/etc) + its scratch/TryBuildScratch. - Caches cleared on level activation (OnServerActivate) + shutdown. Verified live on ttt: sp_proxy (uniform) and sp_proxyfor (per-viewer) both apply — confirming the pack-encoder and per-client-write field-name pointers are the same canonical metadata char*. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
0ac780a5f88b89758674de7a42f5515d15aac072
Parent: 68c7aeb