[BUG] frame_context 在每个查询词上都会将整个文档转换为小写
作者: rohitdevsol创建于 2026年8月9日更新于 2026年8月21日
标签bug
□ 错误描述 在QQsrc/memvid/frame.rs```(约386个)中,代码再次将整个文档小写为查询中每个单词
[Rust] .map (XQNETLEQQ) 内容. to lowercase (. matches (和NETELE. counts ())
由于内容.to lowercase () 位于环内,一个30个单词查询(我先用10个,然后用30个)将整个文档小写了30次而不是一次. 大量浪费了大文件的工作和记忆分配.
固定为一行——在循环前小写一次并再用:
允许降低=内容.到 小写 ();
我用货物长凳(30个字的查询和一个大文件)作为基准
- buggy(当前):~552微秒
- 固定(小于一次):~496微秒
- 约快10%,没有缺点
我的测试截图
<img宽="924"高="235" alt="Image" src="https://GitHub.com/user-attachments/assets/507f0956-3ffc-4ace-910e-24ca8cbe6abc"/".
我用这个代码做了基准
```2ZZ
使用 std: hint::: black box; 使用 std:: hint::: black box; 使用 std: hint: black box; 使用 std: hint: black box; 使用 std: hint: box: black box; 使用 std: hint: box: black box.
使用标准:{标准 组、标准 主要、标准};
fn 计数 buggy( 内容: &str, 查询: &str) - > usize {
让哑弹总数=0;
查询中的单词。 split whitespace () {
总计 QQ 内容. to lowercase (.) matches ( & word. to llowercase ()) count ();
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
共计
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
fn 计数 fixed( 内容: &str, 查询: &str) - > usize {
允许降低=内容.到 小写 ();
让哑弹总数=0;
查询中的单词。 split whitespace () {
总计 QQ 降低. matches( & word. to llower case ()) 计数( );
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
共计
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
fn 长凳( c: & mut 标准) {
让内容="Memvid是快而好的. 其他的内存库都是慢而有名的. ".repeat (英语:
1 000个
(三)
让查询=
"Memvid是好的快速 其他人是noob slow memvid是好的快速
其他人是Noob slow memvid 是好快 其他人是noob slow?
Memvid是好的快速";
c. bench 函数 ("buggy"), |b| {
b.iter(QQ 计数 buggy( 黑 box( & Content), 黑 box( kerry))) )
* ;
c. bench 函数 ("被固定", QQb| {
b.iter (XQQ 计数已固定( black box( & Content), black box( query))) ).
* ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
标准( G) !
标准( main! (benches) ;内容来源: memvid/memvid