继上篇IL2Cpp深坑之WeakReference之后,新坑出炉!?
试用RVO2-CS时,发现Android Mono打出来的包,在500元的安卓手机上可以跑50帧,但是Androdi/iOS IL2Cpp打包在iPhoneX上也只能跑到15帧!真机Profile实锤如下:

分析后,锁定问题代码如下:
for (int block = 0; block < workers_.Length; ++block)
{
doneEvents_[block].Reset();
ThreadPool.QueueUserWorkItem(workers_[block].step);
}
WaitHandle.WaitAll(doneEvents_);
for (int block = 0; block < workers_.Length; ++block)
{
doneEvents_[block].Reset();
ThreadPool.QueueUserWorkItem(workers_[block].update);
}
WaitHandle.WaitAll(doneEvents_);
一开始以为是ThreadPool启动线程数量大于CPU线程所致,尝试限制为CPU线程数量-1,依然无效。

本文探讨了在使用IL2Cpp时遇到的ThreadPool性能问题,通过Unity的Profiler发现,在iOS平台上IL2Cpp打包的应用在iPhoneX上运行帧率大幅降低。经分析,该问题可能与Unity已知的Bug有关。为解决此问题,作者尝试限制ThreadPool线程数量,并最终决定放弃Unity的ThreadPool,转而自行实现。经过代码调整后,应用性能得到改善,满帧运行。

1万+

被折叠的 条评论
为什么被折叠?



