关于Stack Overflow的其他一些问题,我已经从这里阅读了Android Surfaces,SurfaceViews等内部指南:
https://source.android.com/devices/graphics/architecture.html
该指南让我对Android上所有不同部分的组合方式有了更好的理解.它介绍了eglSwapBuffers如何将渲染帧推送到队列中,当它准备下一帧显示时,SurfaceFlinger将使用该队列.如果队列已满,那么它将等到缓冲区在返回之前可用于下一帧.上面的文档将其描述为"填充队列"并依赖交换缓冲区的"反压"来限制渲染到显示的vsync.这是使用GLSurfaceView的默认连续渲染模式发生的情况.
如果你的渲染是简单的并且在比帧周期少得多的情况下完成,那么这是由BufferQueue引起的额外延迟,因为SwapBuffers上的等待直到队列满了才发生,因此我们'重新渲染始终位于队列的后面,因此不会立即显示在下一个vsync上,因为队列中可能存在缓冲区.
相比之下,按需渲染的发生频率通常比显示更新速率低得多,因此通常这些视图的BufferQueues为空,因此推送到这些队列的任何更新都将被SurfaceFlinger在下一个vsync上抓取.
所以问题在于:如何设置连续渲染器,但延迟最小?目标是每个vsync开始时缓冲区队列为空,我在16ms内渲染我的内容,将其推送到队列(缓冲区计数= 1),然后由SurfaceFlinger在下一个vsync(缓冲区计数)上使用它= 0),重复一遍.队列中的缓冲区数量可以在systrace中看到,因此目标是在0和1之间交替使用.
我上面提到的文档介绍了Choreographer作为在每个vsync上获得回调的方法.但是我不相信这足以让我能够实现我追求的最小滞后行为.我已经测试了在vsync回调上使用非常小的onDrawFrame()执行requestRender(),它确实展示了0/1缓冲区计数行为.但是,如果SurfaceFlinger无法在一个帧周期内完成所有工作(可能是通知弹出或其他),该怎么办?在这种情况下,我希望我的渲染器很乐意为每个vsync生成1帧,但该BufferQueue的消费者端已经丢弃了一帧.结果:我们现在在队列中交替使用1到2个缓冲区,并且我们在渲染和查看帧之间获得了一段滞后.
该文档似乎建议查看报告的vsync时间与回调运行时间之间的时间偏差.我可以看到,如果你的回调由于你的主线程由于布局传递或其他东西而延迟传递,那会有什么帮助.但是我认为这不会允许检测到SurfaceFlinger跳过节拍并且不能消耗帧.应用程序是否有任何方法可以解决SurfaceFlinger丢帧的问题?似乎无法告诉队列的长度打破了使用vsync时间进行游戏状态更新的想法,因为在您实际渲染的渲染之前,队列中存在未知数量的帧.
减少队列的最大长度并依赖背压将是实现此目的的一种方法,但我认为没有API来设置GLSurfaceView BufferQueue中的最大缓冲区数量?
在R中,假设我有这个数据框:
Data
id date value
2380 10/30/12 21.01
2380 10/31/12 22.04
2380 11/1/12 22.65
2380 11/2/12 23.11
20100 10/30/12 35.21
20100 10/31/12 37.07
20100 11/1/12 38.17
20100 11/2/12 38.97
20103 10/30/12 57.98
20103 10/31/12 60.83
Run Code Online (Sandbox Code Playgroud)
我想通过组ID日期从当前值中减去先前的值来创建:
id date value diff
2380 10/30/12 21.01 0
2380 10/31/12 22.04 1.03
2380 11/1/12 22.65 0.61
2380 11/2/12 23.11 0.46
20100 10/30/12 35.21 0
20100 10/31/12 37.07 1.86
20100 11/1/12 38.17 1.1
20100 11/2/12 38.97 0.8
20103 10/30/12 57.98 0
20103 10/31/12 60.83 2.85
Run Code Online (Sandbox Code Playgroud) 我注意到一些奇怪的行为,这些行为可能特定于也可能不是特定于我的系统。(运行 Windows 8 的联想 t430)
使用这个脚本:
import time
now = time.time()
while True:
then = now
now = time.time()
dif = now - then
print(dif)
time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)
在浏览器打开的情况下,我得到以下输出(我认为是名义上的)。
但是,如果没有打开浏览器,我会观察到严重的每个循环延迟。
显然,这是违反直觉的,因为我认为当并发进程较少时,任何人都希望获得更好的性能。
对这些结果的任何见解或简单复制将不胜感激。
编辑: 有趣的是,我观察到与此代码类似的延迟:
import time
now = time.time()
def newSleep(mark,duration):
count = 0
while time.time()-mark < duration:
count+=1
print(count)
while True:
then = now
now = time.time()
dif = now - then
print(dif)
#time.sleep(0.01)
newSleep(now,0.01)
Run Code Online (Sandbox Code Playgroud)
虽然它确实提供了额外的洞察力 - 即潜在循环的一些实例是由于缺乏处理器可用性(通过打印 0 的计数来表示) - 我仍然注意到 15ms 的行为,其中打印的计数将高达 70k.. . 和 10 毫秒的行为,计数约为 40k。
可能重复:
最短可感知的应用程序响应延迟是多少?
我一直在分析一些JavaScript UI代码,因为它感觉有点滞后.到目前为止,我发现了一些瓶颈并对其进行了优化,但我想为此定义一个可衡量的要求.
为了让人不注意滞后,应该多快发生一次反应?例如,按下键盘键和屏幕上出现字母之间的最小可检测延迟是多少?在什么时候进一步优化不会对人类产生任何影响?
很多显示器的刷新率大约在60-120Hz范围内.这是否意味着幻数约为8-16毫秒?
在Swift中编写的SpriteKit iOS游戏中,播放非常短的声音(~0.5s)会产生打嗝(如滞后).在其他问题中,我读到了我应该prepareToPlay()
发出的声音.
我甚至使用变量(soundReady
)来检查声音是否在播放前准备好了.每当完成播放(audioPlayerDidFinishPlaying()
)时我也会重新准备声音.以下是代码的相关部分:
class GameScene: SKScene, AVAudioPlayerDelegate {
var splashSound = NSURL()
var audioPlayer = AVAudioPlayer()
var soundReady = false
override func didMoveToView(view: SKView) {
let path = NSBundle.mainBundle().pathForResource("plopSound", ofType: "m4a")
splashSound = NSURL(fileURLWithPath: path)
audioPlayer = AVAudioPlayer(contentsOfURL: splashSound, error: nil)
audioPlayer.delegate = self
soundReady = audioPlayer.prepareToPlay()
}
func playSound(){
if(soundReady){
audioPlayer.play()
soundReady = false
}
}
func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool){
//Prepare to play after Sound finished playing
soundReady = audioPlayer.prepareToPlay()
} …
Run Code Online (Sandbox Code Playgroud) 我有以下数据帧:
a a a b c c d e a a b b b e e d d
Run Code Online (Sandbox Code Playgroud)
所需的结果应该是
a b c d e a b e d
Run Code Online (Sandbox Code Playgroud)
这意味着没有两个连续的行应该具有相同的值.如何在不使用循环的情况下完成.
由于我的数据集非常庞大,因此循环需要花费大量时间来执行.
数据帧结构如下所示
a 1
a 2
a 3
b 2
c 4
c 1
d 3
e 9
a 4
a 8
b 10
b 199
e 2
e 5
d 4
d 10
Run Code Online (Sandbox Code Playgroud)
结果:
a 1
b 2
c 4
d 3
e 9
a 4
b 10 …
Run Code Online (Sandbox Code Playgroud) 当我打开现有项目时,我的Visual Studio似乎冻结/滞后.我已经将NHibernate框架添加到我的代码中,它似乎落后于我的计算机(至少这是我的想法).当我打开其他项目时,我根本不会滞后或冻结.冻结大约是3秒到1分钟,然后它将打开我的项目,它只会采取非常缓慢的行动,可能需要20多秒才能将类转换为20多秒,只需在视觉工作室中输入单个字符即可.
我想知道以前是否有人遇到过这个问题.如果是这样,你是如何解决它的?
在修复之前,我无法真正处理我的代码.哦,当保存代码时,它也冻结了一两分钟.
见demo:jsFiddle
1.什么可能导致这种滞后,如何防止这种情况发生?
2.有没有更好的方法来编码这个动画序列,这可能会阻止任何滞后?
HTML:
<div id="newResFormWrap">
<form id="newResForm" action="" method="post" name="newRes">
<div id="newResFormCont">
<h3>title</h3>
<p>form!</p>
<div class="button" id="cancelNewRes">Cancel</div>
</div>
</form>
</div>
<div class="button" id="addRes">show</div>
Run Code Online (Sandbox Code Playgroud)
jQuery的:
$("#newResForm").css({opacity: 0});
$("#addRes").click(function () {
toggleNewRes()
});
$("#cancelNewRes").click(function () {
toggleNewRes()
});
//toggleNewRes
function toggleNewRes() {
if ($("#newResFormWrap").css('display') == "none") {//if hidden
$("#addRes").animate({ opacity: 0 }, 'fast', function() {
$("#newResFormWrap").toggle('fast', function (){
$("#newResForm").animate({ opacity: 100 },2000);
});
});
} else { //if visible
$("#newResForm").animate({ opacity: 0 }, …
Run Code Online (Sandbox Code Playgroud) 我遇到了Visual Studio 2010的问题,过了一会儿,运行异常缓慢,并减慢其他一切.我的意思是:
我确信这是一个Intellisense问题; 禁用它可以解决所有问题,当在任务管理器中发生这种情况时,我会发现一些运行在大约160,000K内存的vcpkgsrv.exe(智能感知事物)(这与旧的,图形较少的游戏大致相同).但是,我想运行Intellisense.我现在解决这个问题的唯一方法就是在它们放慢速度时中止这些过程.
我已经尝试获取补丁并认为它已安装,因为我无法再次安装它.
编辑:我正在使用VSC++ Express运行Windows XP.我有2GB RAM和双核3.2GHz处理器.有人帮忙吗?
performance intellisense visual-studio-2010 lag visual-studio
我有一个这样的表:
Number Price Type Date Time
------ ----- ---- ---------- ---------
23456 0,665 SV 2014/02/02 08:00:02
23457 1,3 EC 2014/02/02 07:50:45
23460 0,668 SV 2014/02/02 07:36:34
Run Code Online (Sandbox Code Playgroud)
对于每个EC,我需要上一个/下一个SV价格.在这种情况下,查询很简单.
Select Lag(price, 1, price) over (order by date desc, time desc),
Lead(price, 1, price) over (order by date desc, time desc)
from ITEMS
Run Code Online (Sandbox Code Playgroud)
但是,有一些特殊情况,其中两行或更多行是EC类型:
Number Price Type Date Time
------ ----- ---- ---------- ---------
23456 0,665 SV 2014/02/02 08:00:02
23457 1,3 EC 2014/02/02 07:50:45
23658 2,4 EC 2014/02/02 07:50:45
23660 2,4 EC 2014/02/02 …
Run Code Online (Sandbox Code Playgroud) lag ×10
performance ×2
r ×2
android ×1
apply ×1
audio ×1
c# ×1
dataframe ×1
intellisense ×1
ios ×1
jquery ×1
lead ×1
loops ×1
optimization ×1
python ×1
python-3.x ×1
response ×1
sleep ×1
sql-server ×1
surfaceview ×1
swift ×1
windows ×1