gpt4 book ai didi

c# - 如何在不影响性能的情况下不断截取屏幕截图?

转载 作者:可可西里 更新时间:2023-11-01 09:46:12 30 4
gpt4 key购买 nike

要求是这样的:

我必须发出一个命令来请求屏幕截图。扭曲?该命令指定了一个时间——而那个时间已经过去了。请注意,不是永远,只是在 30 秒的窗口内。

我的命令指示实际秒数,相应的屏幕截图从滚动缓存中提取并保存在另一个进程的永久位置。

为此,我必须每秒截屏一次,并且必须将它们保存 30 秒。之后缓存可以自行清除。

我的问题是

哪种屏幕截图方法对桌面的影响最小?

最佳答案

我无法想象每秒一帧对于性能来说会很糟糕。您是否尝试过最简单的方法来查看它是否会影响性能?

看看http://www.dotnetjalps.com/2007/06/how-to-take-screenshot-in-c.html有关如何获取屏幕截图的信息。

我建议您使用计时器:

var ssTimer = new System.Threading.Timer((s) =>
{
GetAndStoreScreenShot();
}, null, 1000, 1000);

您需要在缓存上进行一些同步以防止线程问题(即尝试读取缓存中的第一项,同时它被推出)。可能最容易使用锁,因为这不会对性能特别敏感。

至于缓存用什么,我建议使用LinkedList。很容易追加到列表 (AddLast()) 并删除第一项 (RemoveFirst()),因为您只有 30 个,并且请求屏幕截图相对较少,顺序扫描以获取第 n 个项目不会太耗时。

或者您可以使用ListArray 实现一个简单的循环缓冲区。增加一个索引作为插入点,当你增加结束时环绕。然后查找就变成了一个简单的模运算问题。

关于c# - 如何在不影响性能的情况下不断截取屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424060/

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