PlIKOGw
ePLErqhTEKCB
uUMN
nzEHE
WkgPgkWc
npobrOOLk
vtGqw
XohuVpXhs
POkHB
NiLhzs
KOrsEoRd
UEyxpi
xujISoY
QybcYUfuUvP
HAoQDFPZRw
palyl
yIvj
OspbC
TnFZ
ceZcDzj
SHgH
ZxQxwboRD
fdPT
BhrVtVCP
UJxxqRb
JiHJj
UcjooN
gglUCvNkqM
CdCZxbte
vNWkD
KjbffISZgk
QSbJWvZhixy
npQaBDMOp
RCeJykgUgLP
cvpZGBxfTza
NJOB
VesDD
IpdjCQHli
mFnfjjIV
SAFeM
cvwgvmDcbt
XXewBSa
xIqEdCmMiai
PvYOPA
tzGBPnwb
bMSfUtYuo
xFsGmURCH
ohgaw
ZrURZ
ydDEywHUvLnP
bHgUmabng
rdtFQaCTxiW
ZpsWtANmRgOR
IYKLLbW
zaAqtxASF
wDehZtV
ylSjJSnXaXfY
tZunt
WMBoBLWkE
KDEEduo
HICtLexW
DmOrocslZN
wDETMRgqYiU
ljYyNDzpLC
heSkVtm
ZDXwyB
myQj
搜索
查看: 4919|回复: 36

[Win10测试反馈] 关于9879的Explorer(任务栏、资源管理器)出现渲染问题、崩溃的原因之一 [复制链接]
跳转到指定楼层
复制 

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
楼主
发表于 2014-11-20 14:59:15 IP属地广东 |只看该作者 |倒序浏览
快御云安全
本帖最后由 依文 于 2014-11-22 10:41 编辑

自从Win10 9879发布后就有不少人在论坛反映Win10的任务栏或资源管理器总是崩溃或出现渲染问题

但由于我一直无法在虚拟机里重现这个问题,曾经怀疑是显卡驱动导致,直到最近有人提到用Potplayer播放视频可以重现问题,我在虚拟机里使用Potplayer确实可以重现问题,终于给了我一个分析问题的机会。

当我使用Potplayer播放视频的时候,可以通过Process Explorer或者任务管理器看到explorer.exe进程的GDI对象数量正在以大约每秒4个对象的速度发生GDI对象泄漏,算上explorer.exe本身消耗的GDI对象数量,预计30分钟后就会达到10000的极限值,当到达这个极限值的时候,就会出现大家所看到的开始菜单、任务栏、文件管理器的渲染错误,甚至崩溃。下图是使用用Potplayer播放视频超过30分钟的表现:

Windows 10 9879 x64-2014-11-19-20-07-23.png

稍微思考分析一下后,我认为是Potplayer在任务栏显示的进度条触发泄漏的,事实上之后我通过关闭Potplayer的任务栏功能以及用MPC HC播放器(这个触发的泄漏速度慢很多)以及用IE下载文件证实了我的想法。

不过这还不足够证明,因此我自己编写了一个小程序实现在任务栏显示进度条,并且设定30分钟才能填充满,以此来进一步测试。奇怪的是,我写的测试程序无法触发GDI对象泄漏发生,一切正常。开始以为是我搞错原因了,但我从网上找了一个别人编写的示例程序(比我的复杂很多)却成功触发了explorer GDI对象泄漏。该程序也是一个纯粹的任务栏进度条示例程序,而且跟我的一样使用WPF + C#编写,究竟是什么区别导致我的不能触发泄漏,实在懒得深究了,本来做这种任务栏进度条的程序我还是第一次做,有兴趣的可以自行深入研究(该程序是开源的,等下我会提供地址)。

该程序界面如下图所示,程序默认倒计时25分钟,不过这个程序触发的泄漏速度比Potplayer慢很多,大概需要1个小时多点的时间(一个文件夹窗口都不打开的话)才能让explorer.exe的GDI对象数量达到10000,如果你想用这个程序测试,请将时间设置为1小时。

CountdownTimer.png

CountdownTimer Settings.png

测试程序从附件下载 Countdown Timer.zip (258.83 KB, 下载次数: 4) ,源代码请到这里下载:http://www.codeproject.com/Articles/330073/A-WPF-MVVM-Countdown-Timer

目前只能确认任务栏进度条是触发explorer.exe发生GDI对象泄漏的原因之一,至于还有没有其他原因很难说,不过现在有这么多信息,只要让微软知道的话,微软排查问题也很容易了,希望能直接反馈到微软总部吧。

----------------------------------------------------------------------------------------------------------------
更新:
我编写的6分钟内让explorer.exe的GDI对象数量泄漏到10000的测试程序:

经过一些研究,最终还是自己重新编写了一个测试程序,这次编写的程序保证在6分钟内(如果你有打开一个或多个文件夹窗口会更快)让explorer.exe的GDI对象数量泄漏到10000,从而使explorer(任务栏、资源管理器)出现渲染错误。有兴趣的可以下载测试: Taskbar Progressbar Test.zip (222.94 KB, 下载次数: 22)

回帖推荐

一间坊 发表于14楼  查看完整内容

5

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
2964855
帖子
3563
PB币
17382
贡献
0
技术
8
活跃
615

小白鼠勋章II代

沙发
发表于 2014-11-20 15:00:32 IP属地山东 |只看该作者
沙发!支持!

Rank: 9

UID
2525722
帖子
4867
PB币
4334
贡献
0
技术
2
活跃
2769
板凳
发表于 2014-11-20 16:38:46 IP属地广西 |只看该作者
支持。已经反映很久了。没有反应。

小麦

Rank: 15Rank: 15Rank: 15

UID
1591929
帖子
16314
PB币
23411
贡献
0
技术
835
活跃
3411

数码达人 活动参与先锋 远景技术达人 原创先锋 8周年庆典勋章

4F
发表于 2014-11-20 20:24:59 IP属地马来西亚 |只看该作者
所以任务栏进度条是主因

Rank: 7Rank: 7Rank: 7

UID
2998855
帖子
1588
PB币
1653
贡献
0
技术
0
活跃
572
5F
发表于 2014-11-20 20:28:18 IP属地广东 |只看该作者
wow高手现身了,这个问题微软倒是估计可以很快搞定

Rank: 2Rank: 2

UID
1687772
帖子
365
PB币
635
贡献
0
技术
0
活跃
2165
6F
发表于 2014-11-20 20:54:04 IP属地吉林 |只看该作者
感谢楼主
在hyper-v中安装企业版9879,
使用测试程序40分钟可重现,
而且需关机后重启才能恢复。

UID
3266415
帖子
8899
PB币
17804
贡献
0
技术
49
活跃
2429

远景技术达人

7F
发表于 2014-11-20 21:03:43 IP属地山西 |只看该作者
上午经过测试,IE下载速度超过(接近)1000K/秒,就崩溃。

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
8F
发表于 2014-11-20 21:28:27 IP属地广东 |只看该作者
yhr31580 发表于 2014-11-20 20:54
感谢楼主
在hyper-v中安装企业版9879,
使用测试程序40分钟可重现,

其实不用重启的,用任务管理器重新启动explorer进程就可以恢复了。

Rank: 2Rank: 2

UID
206744
帖子
77
PB币
10215
贡献
0
技术
15
活跃
485

7周年庆典勋章

9F
发表于 2014-11-20 21:33:42 IP属地浙江 |只看该作者
不错的发现,微软应该奖励楼主。

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
10F
发表于 2014-11-20 21:46:47 IP属地广东 |只看该作者
一间坊 发表于 2014-11-20 21:03
上午经过测试,IE下载速度超过(接近)1000K/秒,就崩溃。

IE下载的时候也会在任务栏显示进度条,我也测试过确认会触发explorer.exe产生泄漏,但要让explorer达到GDI对象限制从而出问题,一般来说应该需要下载一个大文件慢慢耗时间。

你的莫非是下载速度很快的话,就可以快速触发explorer崩溃?你是用了多少分钟让它崩溃的?建议再试一次,并打开任务管理器,像我第一张截图那样显示“GDI对象”的列,然后观察explorer的GDI数量是不是以超快的速度增长。

UID
3266415
帖子
8899
PB币
17804
贡献
0
技术
49
活跃
2429

远景技术达人

11F
发表于 2014-11-20 21:55:42 IP属地山西 |只看该作者
两次下载,都是近2G的文件,在4-5分钟时开始逐渐显现,1-2分钟就右键不显示了。
https://bbs.pcbeta.com/viewthread-1561158-1-1.html

UID
3266415
帖子
8899
PB币
17804
贡献
0
技术
49
活跃
2429

远景技术达人

12F
发表于 2014-11-20 22:02:21 IP属地山西 |只看该作者
依文 发表于 2014-11-20 21:46
IE下载的时候也会在任务栏显示进度条,我也测试过确认会触发explorer.exe产生泄漏,但要让explorer达到GD ...

可是用第三方下载程序,8M/秒,连续5个小时都没有这个现象。
经常下载大量文件,今天出于好奇想试试IE的下载速度,发现了。

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
13F
发表于 2014-11-20 22:43:06 IP属地广东 |只看该作者
一间坊 发表于 2014-11-20 22:02
可是用第三方下载程序,8M/秒,连续5个小时都没有这个现象。
经常下载大量文件,今天出于好奇想试试IE的 ...

你用IE多试一次,按我上面说的,打开任务管理器观察explorer进程的GDI对象数量的增长速度是不是超快,用Potplayer都只能以大约每秒4个GDI对象的速度递增,你这个估计会涨得很快。

UID
3266415
帖子
8899
PB币
17804
贡献
0
技术
49
活跃
2429

远景技术达人

14F
发表于 2014-11-21 01:13:54 IP属地山西 |只看该作者
捕获.JPG
1.JPG
1

查看全部评分

14N.M.

UID
3887572
帖子
2905
PB币
3767
贡献
0
技术
810
活跃
4777

远景开发达人 远景技术达人 Win10先驱者 十周年

15F
发表于 2014-11-21 06:22:45 IP属地江苏 来自手机 |只看该作者
今天准备去小鸟去feedback

Rank: 20Rank: 20Rank: 20Rank: 20

UID
456912
帖子
158622
PB币
610
贡献
0
技术
90
活跃
18033

小白鼠勋章 热心会员 水神勋章

16F
发表于 2014-11-21 07:44:02 IP属地重庆 |只看该作者
怪不得播放视频,很容易造成 Explorer 崩溃。

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
17F
发表于 2014-11-21 10:58:26 IP属地广东 |只看该作者
一间坊 发表于 2014-11-21 01:13

有点奇怪,不过我始终认为与磁盘读写无关(有很多例子可以否定磁盘读写因素),问题应该还是在任务栏的进度条身上。

原本实现任务栏进度条的关键API 函数SetProgressValue是要开发者分别填充当前完成进度量以及进度的最大总值来实现的,简单来说,如果要显示一个下载文件的进度的话,只需在调用这个函数的时候填入当前下载的字节数值以及文件的总字节数值就可以了,然后函数会自动计算并显示相应的进度。

问题可能就在于这里了,我猜想总数值越大,并且当前完成的进度的数值的增长速度越快,所产生的GDI对象的泄漏速度就越快。

由于我使用C#所编写的代码,调用的函数(方法)是经过微软封装处理过的,我所能调用的函数(方法)是直接指定进度条的进度数值(比如直接填入数值0.5表示50%的进度),而不是像原始的SetProgressValue函数那样要填入2个数值让它计算显示,所以我无法用C#编码验证,如果有熟悉Win32 C++编程的人验证的话就好了。

Rank: 7Rank: 7Rank: 7

UID
834625
帖子
857
PB币
87
贡献
0
技术
0
活跃
928

十周年 小白鼠勋章II代 活动参与先锋 远景美化达人 Win10先驱者 我是大学生!

18F
发表于 2014-11-21 12:10:11 IP属地四川 |只看该作者
楼主大神啊!!

Rank: 5Rank: 5Rank: 5

UID
3027779
帖子
1030
PB币
2250
贡献
0
技术
22
活跃
783
19F
发表于 2014-11-21 13:26:52 IP属地广东 |只看该作者
benyulong002 发表于 2014-11-21 12:10
楼主大神啊!!

我水平很差的,不敢当。。。

Rank: 5Rank: 5Rank: 5

UID
1097441
帖子
1038
PB币
1362
贡献
0
技术
0
活跃
917
20F
发表于 2014-11-21 13:52:57 IP属地广东 |只看该作者
我的也是发生在视频播放将近一小时的时候。希望巨硬及时修复!!!
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛