首页 / C# / c#-访问网格顶点性能问题
c#-访问网格顶点性能问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-访问网格顶点性能问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2152字,纯文字阅读大概需要4分钟。
内容图文
我遇到了这段代码运行缓慢的问题(执行循环大约需要250毫秒)
mesh.triangles.Length是8700.
我在最新的Unity平台(版本2018.2.3)上使用c#.
我怀疑这是因为我每次迭代都在两个数组之间切换,即.我从三角形取一个值,然后查找它的顶点元素.
mesh.triangles是一个整数数组.
mesh.vertices是Vector3的数组.
while (j < mesh.triangles.Length)
{
m_Particles [currentParticlePos].position = vertices[mesh.triangles[j]];
// allocate a particle to every 3rd vertex position.
j = j + 3;
currentParticlePos++;
}
解决方法:
手动强制进行一些微优化可能会帮助您.
首先,mesh.triangles是一个属性,具有自己的getter和setter.您将在每个循环中获得轻微的性能下降.因此,让我们在循环开始之前将该地址存储为局部变量.
其次,mesh.triangles.Length的值始终相同.因此,让我们将其存储在局部变量中,而不是在每个循环中都调用属性.
接下来,您的代码使用顶点[],而您的问题涉及mesh.vertices [].如果要在每个循环中检查mesh.vertices [],则也要在本地存储它.
现在,根据编译器的不同,以下微优化可能已经处理完毕.因此,您必须使用计时技术来验证这是否值得.话虽如此,现在让我们看一下代码:
int [ ] triangles = mesh.triangles;
int length= triangles.Length;
int [ ] vertices = mesh.vertices;
while (j < length)
{
m_Particles [ currentParticlePos++ ].position = vertices [ triangles [ j ] ];
// allocate a particle to every 3rd vertex position.
j = j + 3;
}
顺便说一句,虽然现在对您没有帮助,但C#7.x引入了ref struct和其他一些有用的功能,这些功能将加快访问速度,并将所有内容保留在堆栈中. This article是一本有趣的文章,当Unity赶上时将很有用.
编辑:如果您的网格不改变(可能是这样),则可以预定义所需确切顶点的数组.然后,您还只需要增加一个变量.这是极端的微优化.这可能有助于CPU预取…(在此处插入耸肩的表情符号).
// The mesh. Assigned as you see fit.
Mesh mesh;
// The length of the new vertices array, holding every third vertex of a triangle.
int length = 0;
// The new vertices array holding every third vertex.
Vector3 [ ] vertices;
void Start ( )
{
int [ ] triangles = mesh.triangles;
length = triangles.Length / 3;
vertices = new Vector3 [ length ];
for ( int count = 0; count < length; count++ )
vertices [ count ] = mesh.vertices [ triangles [ count * 3 ] ] ;
}
private void Update ( )
{
int j = 0;
while ( j < length )
{
m_Particles [ j ].position = vertices [ j++ ];
}
}
内容总结
以上是互联网集市为您收集整理的c#-访问网格顶点性能问题全部内容,希望文章能够帮你解决c#-访问网格顶点性能问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。