当前位置:首页>python>Python原型,怎么迁移成C++工程?

Python原型,怎么迁移成C++工程?

  • 2026-08-18 23:11:48
Python原型,怎么迁移成C++工程?

Python原型,怎么迁移成C++工程?

摘要

Python 很适合验证算法:几行 OpenCV 代码就能读图,NumPy 可以直接检查 Tensor,ONNX Runtime 也能快速完成模型验证。但当同一套逻辑迁移到 C++,项目经常出现一种反差:代码能编译,模型能加载,输出却和 Python 不一致;单张图片正常,接入视频后开始丢帧;换成 TensorRT 后速度上来了,内存和线程问题又暴露出来。

迁移的对象不只是语法。真正需要保留下来的是 Python 原型已经验证过的数据语义和算法行为,需要重新设计的是接口、资源所有权、错误处理、构建方式与长期运行机制。本文以一个目标检测项目为例,给出一条可复现、可定位、可继续优化的迁移路径。

一、Python 里一百行能跑,为什么 C++ 写到一千行还对不上?

Python 原型通常把多件事压在同一个脚本里:读取图片、Letterbox、颜色转换、归一化、模型调用、输出解析、NMS 和画框。动态类型、自动内存管理和成熟库接口,让开发者可以把注意力集中在算法行为上。

C++ 工程必须把许多隐含条件写清楚。图像内存是否连续?cv::Mat 是拥有数据还是只引用外部 Buffer?输入是 BGR 还是 RGB?Tensor 是 NCHW 还是 NHWC?模型输出由谁释放?推理线程是否允许和显示线程共享同一块内存?错误发生后是返回状态、抛出异常,还是进入降级路径?

如果迁移工作从“把 list 换成 std::vector、把 cv2 换成 cv::Mat”开始,代码虽然很快能编译,但很容易把原型中的关键约束丢掉。下面这张图区分了两条路线。

左侧只改变语法写法,右侧则先冻结行为,再定义边界、逐层验证,并补齐资源管理、构建和稳定性测试。后者看起来步骤更多,却能显著缩短“结果不一致但不知道错在哪”的时间。

二、迁移开始前,先把 Python 版本冻结下来

可靠迁移的第一步不是创建 C++ 项目,而是把 Python 参考实现变成可验证基线。模型文件、opset、输入尺寸、类别表、置信度阈值、NMS 阈值、Letterbox 规则和测试数据都要固定。测试时关闭随机增强,记录依赖版本,并保留一次完整推理所需的配置。

“Python 看起来能跑”还不够。至少要回答以下问题:输入图像是否转为 RGB;缩放时使用什么插值;奇数 Padding 如何分配到两侧;归一化是除以 255,还是还包含 mean/std;Tensor 的 shape 和 dtype 是什么;模型输出是否包含 objectness;坐标采用 xywh 还是 xyxy;NMS 是类别相关还是类别无关。

这些信息一旦没有固定,后续发现 C++ 结果不同,就无法判断差异来自语言、依赖版本、配置还是算法本身。

三、不要只保存最终检测框,要建立 Golden Sample

迁移最有效的工具不是更多日志,而是一组可以逐层对账的 Golden Sample。它应覆盖正常目标、小目标、空场景、遮挡和典型误检,并保存 Python 参考实现的中间结果。

建议至少保留五类资产:Letterbox 后图像及 scale/pad;输入 Tensor 的 shape、dtype、最小值和最大值;Runtime 原始输出;Decode 后且 NMS 前的候选框;最终框、类别和分数。浮点 Tensor 不必全部打印,可保存为 .npy 或二进制文件,并记录统计量和少量切片。

图中的链路故意把原始输出、Decode 和最终结果拆开。假设 Python 检出 3 个目标,C++ 只检出 2 个:如果 Raw Output 已经不同,应检查前处理、输入绑定或 Runtime;如果 Raw Output 接近而最终框不同,问题通常落在坐标解析、阈值、排序或 NMS。这样排查不再依靠猜测。

四、先拆清边界,再写 C++ 类

许多迁移项目一开始就设计大量类,最后只是把原脚本切成多个文件。更稳的做法是先定义数据和职责边界,再决定类的数量。

一个目标检测工程可以保留四层。Application 负责视频源、任务状态、业务输出和告警;Detector 负责前处理、推理接口和后处理;Backend 封装 ONNX Runtime、TensorRT、OpenVINO 或 RKNN;Platform 负责 CPU、CUDA、NPU、相机和文件系统等平台资源。

关键接口可以很小。例如 IInferenceEngine 只接收描述清楚的 Tensor View,并返回带 shape、dtype 和生命周期约束的输出。Detector 不直接访问 TensorRT Context,Application 也不应该知道 NMS 细节。以后从 ONNX Runtime 切换到 TensorRT,只替换 Backend,实现层以上的检测语义保持不变。

这里要避免一种无效抽象:把 Ort::Session::Run() 包进 run_model(),却仍然让上层管理输入指针、设备内存和输出生命周期。真正的边界应明确谁创建资源、谁拥有资源、谁可以修改、什么时候失效。

五、结果不一致,最常见的原因在数据语义

Python 和 C++ 调用同一个 ONNX 文件,结果仍可能不同。高频原因往往不是模型,而是输入在进入 Runtime 前已经发生变化。

OpenCV 的 cv::Mat 可能是连续内存,也可能只是带步长的 ROI 视图。OpenCV 官方文档提供 isContinuous() 用于判断矩阵是否连续;当代码准备把 data 直接复制成 Tensor 时,必须同时核对 step、通道数和 ROI 情况。简单地计算 rows * cols * channels 并整块拷贝,并不总是成立。

颜色和布局也必须显式处理。OpenCV 读入通常是 BGR,而许多训练流程使用 RGB;图像在内存中常是 HWC,推理输入常要求 NCHW。uint8float32 和 float16 的转换顺序不同,也可能产生数值偏差。Letterbox 除了缩放,还包含 Padding 值、左右分配和坐标还原规则,任何一项不同都会传导到最终检测框。

更实际的做法是为每个阶段建立不变量。例如,预处理输出必须满足 N=1C=3、固定 dtype、有限数值、连续内存和明确的颜色顺序;后处理输入必须匹配模型版本公开的输出 shape。发现不满足时立即报错,不让错误 Tensor 继续进入下一层。

六、第一版 C++ 不要同时更换推理框架

如果 Python 使用 ONNX Runtime,第一版 C++ 最好继续使用 ONNX Runtime。官方 C++ 接口和推理示例足以完成 CPU 或相应 Execution Provider 下的对齐验证。此时只改变语言和工程结构,模型、Runtime、精度和输入尺寸都不变,差异来源更容易控制。

一上来同时做四件事——Python 改 C++、ONNX Runtime 改 TensorRT、FP32 改 FP16、固定输入改动态输入——会让问题空间迅速扩大。即使结果错了,也无法知道是前处理、精度模式、Engine 构建还是后处理造成。

建议设置明确门禁:固定样本上,前处理图像能够像素级比较;输入 Tensor 的最大误差和平均误差在可接受范围;Raw Output 的 shape 一致且数值接近;最终框经过合理容差匹配。通过这些门禁后,再更换 TensorRT 或目标 NPU SDK。

七、逐层对账,比盯着最终 mAP 更高效

迁移验证应从最靠近输入的位置开始。对浮点数组,可以记录最大绝对误差:max(|x_python - x_cpp|),以及平均绝对误差:mean(|x_python - x_cpp|)。对检测结果,还要比较框数量、类别、IoU 和分数,而不是要求浮点值逐位相同。

一个常见案例是:两端 Letterbox 图像相同,Input Tensor 也相同,Raw

 Output 最大误差很小,但 C++ 少了一个框。继续比较会发现,Python 在 NMS 前保留了分数 0.251 的候选框,C++ 因为先做了一次不同的舍入,分数变成 0.249,刚好被 0.25 阈值过滤。此时修改模型或重新导出 ONNX 都没有意义,问题就在阈值前后的数值处理顺序。

另一个案例是框位置整体偏移。若 Raw Output 一致,应检查 C++ 是否使用了整数缩放比例、是否正确扣除 Padding、是否把中心点坐标误当作左上角坐标。逐层对账能够把一个“模型不准”的模糊问题,缩小为某个函数中的确定差异。

八、C++ 工程的核心难点,是资源所有权和生命周期

Python 会替开发者管理多数对象生命周期,C++ 必须把这些关系明确下来。模型 Session、Execution Context、设备内存、Pinned Host Buffer、图像帧和输出 Tensor 都应有清晰 Owner。

优先使用 RAII:资源在对象构造或工厂函数中获得,在析构时释放;避免在多个错误分支手动 free。只读数据可以用 std::span 或等价 View 表达,拥有内存的数据使用 std::vector、智能指针或专用 Buffer 类型。接口中要区分“拥有数据”和“临时借用数据”,否则异步推理很容易引用已经失效的内存。

性能优化也应建立在正确生命周期上。TensorRT 官方优化文档强调内存管理和 Buffer 复用的重要性,但复用不等于所有线程共享同一块数组。更常见的结构是每个推理 Context 拥有自己的输入输出 Buffer,或从受控 Buffer Pool 中借用;任务完成后再归还。这样既减少重复分配,也避免并发覆盖。

九、单图跑通之后,视频链路还要重新验证

单张图片验证的是算法一致性,视频系统还要处理时间关系。采集、解码、前处理、推理、后处理和显示可能位于不同线程;如果只传递裸图像而不带 Frame ID 和时间戳,结果很容易画到错误帧上。

队列必须有界。采集速度高于处理速度时,无限队列会让延迟持续增长;实时任务通常更适合限制队列长度,并根据业务选择丢旧帧、阻塞采集或降采样。每个结果应携带 frame_id、采集时间、推理完成时间和有效状态,便于判断结果新鲜度。

线程划分也不能只以“模块”为依据。一个线程一个模块可能增加锁和数据复制。应先测量各阶段耗时和依赖,再决定串行、流水线还是异步。特别要检查 OpenCV 图像是否发生隐式 Clone、CPU 与设备之间是否重复拷贝、后处理是否成为新的瓶颈。

十、构建、日志和测试决定工程能否维护

CMake 不应只是“把所有 .cpp 编译起来”。现代 CMake 更强调 target:为每个模块声明自己的源文件、include 目录、编译选项和依赖,通过 target_link_libraries 和 target_include_directories 表达传播关系。这样 ONNX Runtime、OpenCV 和平台 SDK 不会无边界地污染整个工程。

配置项要从代码中剥离,包括模型路径、输入尺寸、类别表、阈值、设备 ID 和线程数;加载后立即校验,而不是运行到某一帧才失败。日志至少应记录模型版本、配置摘要、输入 shape、Backend、阶段耗时、队列峰值和错误计数,但不要在实时路径逐帧打印大段字符串。

测试可以分三层:纯函数测试覆盖 Letterbox、坐标还原和 NMS;Golden Sample 集成测试覆盖完整检测链;长时间运行测试观察内存、队列、温度和错误恢复。只做“启动后看一张图”无法发现缓慢泄漏、偶发竞争和数据积压。

十一、推荐迁移顺序:一次只改变一个变量

下面的路线适合大多数从 Python 原型走向 C++ 部署的视觉项目。

先冻结模型、配置和代表性样本;再用相同 Runtime 完成前处理、Raw Output 和后处理对齐;随后补齐 RAII、配置、日志、错误处理和 CMake;接入视频后验证 Frame ID、有界队列和长时间运行;最后才更换 TensorRT、FP16、动态输入或多线程并发,并用 Profiler 证明优化落点。

这个顺序的价值在于,每次只改变一个主要变量。某一步出现偏差,可以回到上一道已经通过的门禁,而不是在语言、Runtime、精度和并发之间反复试错。

十二、总结

Python 原型迁移到 C++,最容易犯的错误是把“语法翻译完成”当作“工程迁移完成”。真正可交付的 C++ 版本,需要保持输入、前处理、模型输出和后处理语义一致,同时明确模块边界、数据所有权、错误策略、构建依赖和运行时状态。

最实用的检查标准不是代码行数,也不是是否使用了某个高级框架,而是四件事:同一批输入能否复现相同结果;差异能否定位到具体阶段;资源和时延是否可测;更换 Backend 或硬件时,上层业务是否保持稳定。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 17:44:47 HTTP/2.0 GET : https://f.mffb.com.cn/a/509305.html
  2. 运行时间 : 0.148348s [ 吞吐率:6.74req/s ] 内存消耗:4,986.35kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b2f78596586f1a701fa18fe87315a869
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000541s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000648s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.003806s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000310s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000479s ]
  6. SELECT * FROM `set` [ RunTime:0.000219s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000516s ]
  8. SELECT * FROM `article` WHERE `id` = 509305 LIMIT 1 [ RunTime:0.001404s ]
  9. UPDATE `article` SET `lasttime` = 1787305487 WHERE `id` = 509305 [ RunTime:0.007442s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.009073s ]
  11. SELECT * FROM `article` WHERE `id` < 509305 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000582s ]
  12. SELECT * FROM `article` WHERE `id` > 509305 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000537s ]
  13. SELECT * FROM `article` WHERE `id` < 509305 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.004127s ]
  14. SELECT * FROM `article` WHERE `id` < 509305 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008356s ]
  15. SELECT * FROM `article` WHERE `id` < 509305 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013570s ]
0.149975s