Files
TransPyC/lib
TermiNexus f1e7fd6c28 perf(tpc): _LookupStubFuncType 的目录计数按目录 mtime 缓存,去掉每次调用的全量 listdir
类别:纯提速(判定结果不变)。原实现每次调用都要

  sum(1 for f in os.listdir(output_dir) if f.endswith('.stub.ll'))
  sum(1 for f in os.listdir(temp_dir)   if f.endswith('.stub.ll'))

只为构造一个"stub 是否新增"的签名;本函数位于每次跨模块函数/方法查找的热路径
(20 个调用点),开销 = O(目录文件数) × 调用次数,与编译工作量无关,工程越大越亏。

改为 ImportHandle._CountStubFilesInDir(DirPath):同一「目录 + 目录 mtime_ns」
只 listdir 一次,mtime 命中即复用上次计数(每目录一次 os.stat 代替一次
os.listdir + 全量 endswith 判定)。
判据:stub 目录只增不改、且由主进程在批次之间写入 ⇒ 只有目录条目增删才会改变
计数,而 Windows/NTFS 在条目增/删/改名时会更新目录 mtime。
取不到 stat(目录不存在/权限)时不写缓存、退化为每次实算。
计数仍是权威签名,缓存只决定"要不要重新 listdir",不改变任何判定结果
(增量重扫、output 覆盖 temp 的语义逐字不变)。
2026-09-29 14:32:39 +08:00
..