gpt4 book ai didi

c# - 从流 .NET 读取时性能低下

转载 作者:行者123 更新时间:2023-11-30 15:10:25 25 4
gpt4 key购买 nike

我有一个监控系统,我想在警报触发时保存来自摄像机的快照。我已经尝试了很多方法来做到这一点......并且一切正常,从相机流式传输快照然后将其保存为 jpg 在电脑中......图片(jpg格式,1280*1024,140KB)..可以 但我的问题是应用程序性能......该应用程序需要大约 20 ~ 30 秒来读取 Steam ,这是 Not Acceptable ,因为该方法将每 2 秒调用一次。我需要知道该代码有什么问题以及我如何才能比这快得多。 ?提前谢谢了代码:

string sourceURL = "http://192.168.0.211/cgi-bin/cmd/encoder?SNAPSHOT";
byte[] buffer = new byte[200000];
int read, total = 0;
WebRequest req = (WebRequest)WebRequest.Create(sourceURL);
req.Credentials = new NetworkCredential("admin", "123456");
WebResponse resp = req.GetResponse();
Stream stream = resp.GetResponseStream();
while ((read = stream.Read(buffer, total, 1000)) != 0)
{
total += read;
}
Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0,total));
string path = JPGName.Text+".jpg";
bmp.Save(path);

最佳答案

我非常怀疑这段代码是问题的原因,至少对于第一个方法调用而言(但请阅读下文)。

从技术上讲,您可以在不先保存到内存缓冲区的情况下生成位图,或者如果您也不需要显示图像,则可以在不构建位图的情况下保存原始数据,但这无济于事在多秒方面提高了性能。您是否检查过使用浏览器、wget、curl 或任何工具从该 URL 下载图像需要多长时间,因为我怀疑编码源出现问题。

你应该做的是清理你的资源;正确关闭流。如果您定期调用此方法,这可能会导致问题,因为 .NET 只会在任何时候打开到同一主机的几个连接。

// Make sure the stream gets closed once we're done with it
using (Stream stream = resp.GetResponseStream())
{
// A larger buffer size would be benefitial, but it's not going
// to make a significant difference.
while ((read = stream.Read(buffer, total, 1000)) != 0)
{
total += read;
}
}

关于c# - 从流 .NET 读取时性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com