SIGN IN SIGN UP

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