多年来,我一直在使用 Indy 10.5 和几个旧版本。为了支持 HTTP Digest Authentication,我从他们的 SVN 下载了最新版本。
这是解决我遇到的 HTTP 摘要身份验证问题...
问题是自 10.6 以来所有版本的 CPU 使用率。
我能够并行创建 20 个线程来检索 HTTP 流(准确地说是网络摄像机 MJPEG 流),并且每个任务使用大约 1-3% 的 cpu,具体取决于分辨率和帧速率。(包括解析和解码)
我已经清理了通常使用 IOHandler、CookieManager 并依赖于 InternalWork 方法的代码,直到剩下 idHttp 的最基本用法,这可能是:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTPClient : TidHTTP;
begin
HTTPClient := TidHTTP.Create(nil);
HTTPClient.Get('http://plazacam.studentaffairs.duke.edu/axis-cgi/mjpg/video.cgi?resolution=640x480');
HTTPClient.Free();
end;
即使上面的代码没有改变任何设置,也消耗了 25% 的 CPU(所以它饱和了我电脑的 1 个核心)。
这是一个无限流,所以它不返回客户端是正常的,但由于流可能 < 100kb/s,检索它的 cpu 使用率应该接近于零......
我在另一个德语论坛上读到,添加此 HTTPOptions 可能会解决高 CPU 的问题,但在我的情况下它对 CPU 没有影响: HTTPOptions := [hoNoParseMetaHTTPEquiv]
我已经尝试过使用 Indy SVN 的先前版本,以确保它不是特定于日常构建的东西。
XE4、XE5 和 X6 附带的 10.6.0 版本有同样的问题,但如果我回滚到:Indy 10.5.5 - RS2010 RTM
然后一切都很好(除了 HTTP Digest 身份验证),它只使用了大约 2% 的 cpu ...
有没有人遇到过同样的情况并且有办法让当前版本的 indy 使用合理数量的 CPU 来执行此操作?
谢谢!