dev.to | 📄 原文链接 | 2026-08-05 收录

为了数一次单词,我哈希了它两遍

来源:dev.to — 2026-08-04

📋 概述

作者在剖析一个日志解析器时发现,最平淡的“字典自增”热循环竟然比预期更占性能,原因近乎滑稽:那段几乎人人都会写的计数代码把每个 key 哈希了两次。TryGetValue 先算哈希、走桶、找到条目,然后 counts[code] = ... 又把这一切扔掉重来一遍去写入——同一个 key、同一个哈希、同一趟桶查找,每个 token 做了两遍。他改用 CollectionsMarshal.GetValueRefOrAddDefault,一次哈希一次走桶,直接拿到指向存储槽的 ref 原地修改。在 500 万个 token、2 万词表的测试上,循环提速约 1.7 倍,且每次运行都稳定成立。

🔑 核心要点

💡 金句

One hash, one bucket walk, then you mutate the storage in place.
← 返回 Dev.to 首页