为什么在调用TImage.Picture.LoadFromFile之后代码仍继续?

杰里·道奇

我正在对标准VCLTImage控件和各种其他第三方替代产品的性能进行比较我正在GetTickCount测量加载图像需要多长时间。实际上,这大约需要4秒钟,但是LoadFromFile()几乎让我惊讶!

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  FStart:= GetTickCount;
  imgStandard.Picture.LoadFromFile(txtFilename.Text);
  FEnd:= GetTickCount; //<-- Put a breakpoint here to observe immediate return in debug
  lblStandard.Caption:= IntToStr(FEnd-FStart)+' Msec';
end;

从视觉上将相同的JPEG文件加载到两个图像控件中所需的时间,例如与TImage32从Graphics32中进行比较所需的时间一样长两者均在此时间段(大约4秒)内按预期阻止了UI。GR32报告例如3734毫秒,而标准报告仅报告16毫秒。

为什么会这样?如何准确测量将图像真正加载到图像中所需的时间TImage

戴维·赫弗南

为什么会这样?

这两个控件之间的区别在于处理减压的方式。

  • 当您以这种方式使用VCL图像控件时,将从文件中读取压缩数据,但实际的解压缩仅在绘制控件时按需发生。
  • 当您使用graphics32图像控件时,在加载文件时进行解压缩。

图像几乎所有时间都用于减压步骤,这可以解释您的时间差异。

如何准确测量将图像真正加载到图像中所需的时间TImage

您可以在对的调用之后imgStandard.Update立即插入对的调用LoadFromFile,这将强制进行绘制循环,从而强制执行减压步骤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么即使在“ return res.send();”之后代码仍继续运行

来自分类Dev

为什么即使在“ return res.send();”之后代码仍继续运行

来自分类Dev

允许在调用方法和JOptionPane之后代码继续执行所需的计时器或其他想法

来自分类Dev

允许在调用方法和JOptionPane之后代码继续执行所需的计时器或其他想法

来自分类Dev

为什么python在`pass`之后继续评估代码?

来自分类Dev

为什么在等待方法之后的代码没有被调用

来自分类Dev

为什么在继续之后;执行进一步的功能代码被执行?

来自分类Dev

为什么在startActivityForResult之后调用oncreate方法?

来自分类Dev

为什么onSaveInstanceState在onPause之后调用

来自分类Dev

为什么在onAreaTouched调用之后,会调用onSceneTouchEvent()事件?

来自分类Dev

为什么在onAreaTouched调用之后,会调用onSceneTouchEvent()事件?

来自分类Dev

为什么此代码继续循环?

来自分类Dev

为什么收到响应后代码无法执行

来自分类Dev

为什么我的n皇后代码返回空列表?

来自分类Dev

为什么收到响应后代码无法执行

来自分类Dev

为什么添加引导程序后代码不起作用

来自分类Dev

为什么在添加范围解析参数后代码可以工作?

来自分类Dev

为什么在赋值运算符之后在此代码中调用复制构造函数?

来自分类Dev

为什么取消调用后线程继续运行?

来自分类Dev

休眠拦截器-为什么在onSave之后调用onFlushDirty?

来自分类Dev

为什么在onclick事件之后需要function(){...}来调用函数?

来自分类Dev

为什么在std :: move之后需要析构函数调用?

来自分类Dev

为什么在groupBy运算符之后未调用订阅?

来自分类Dev

为什么Scip在调用SCIPincludeBranchRrule之后做出额外的分支决定?

来自分类Dev

为什么在调用Dispose()之后IsDisposed返回false?

来自分类Dev

为什么在此 gulpfile 中的“scss”之后调用“inline”?

来自分类Dev

为什么此代码调用副本构造函数?

来自分类Dev

为什么这段代码不调用子类?Java中的继承

来自分类Dev

为什么代码会不断调用mmap和munmap?

Related 相关文章

  1. 1

    为什么即使在“ return res.send();”之后代码仍继续运行

  2. 2

    为什么即使在“ return res.send();”之后代码仍继续运行

  3. 3

    允许在调用方法和JOptionPane之后代码继续执行所需的计时器或其他想法

  4. 4

    允许在调用方法和JOptionPane之后代码继续执行所需的计时器或其他想法

  5. 5

    为什么python在`pass`之后继续评估代码?

  6. 6

    为什么在等待方法之后的代码没有被调用

  7. 7

    为什么在继续之后;执行进一步的功能代码被执行?

  8. 8

    为什么在startActivityForResult之后调用oncreate方法?

  9. 9

    为什么onSaveInstanceState在onPause之后调用

  10. 10

    为什么在onAreaTouched调用之后,会调用onSceneTouchEvent()事件?

  11. 11

    为什么在onAreaTouched调用之后,会调用onSceneTouchEvent()事件?

  12. 12

    为什么此代码继续循环?

  13. 13

    为什么收到响应后代码无法执行

  14. 14

    为什么我的n皇后代码返回空列表?

  15. 15

    为什么收到响应后代码无法执行

  16. 16

    为什么添加引导程序后代码不起作用

  17. 17

    为什么在添加范围解析参数后代码可以工作?

  18. 18

    为什么在赋值运算符之后在此代码中调用复制构造函数?

  19. 19

    为什么取消调用后线程继续运行?

  20. 20

    休眠拦截器-为什么在onSave之后调用onFlushDirty?

  21. 21

    为什么在onclick事件之后需要function(){...}来调用函数?

  22. 22

    为什么在std :: move之后需要析构函数调用?

  23. 23

    为什么在groupBy运算符之后未调用订阅?

  24. 24

    为什么Scip在调用SCIPincludeBranchRrule之后做出额外的分支决定?

  25. 25

    为什么在调用Dispose()之后IsDisposed返回false?

  26. 26

    为什么在此 gulpfile 中的“scss”之后调用“inline”?

  27. 27

    为什么此代码调用副本构造函数?

  28. 28

    为什么这段代码不调用子类?Java中的继承

  29. 29

    为什么代码会不断调用mmap和munmap?

热门标签

归档