关于为什么鎀ransform等引用效率会更高

作者&投稿:苏禄 (若有异议请与网页底部的电邮联系)
关于为什么鎀ransform等引用效率会更高~

正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如: private Transform myTransform; void Awake() { myTransform = transform; }

正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:
private Transform myTransform;
void Awake() {
myTransform = transform;
}
然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。
this.transform并不是变量,而是一个get/set属性(property)。
using System;
using System.Runtime.CompilerServices;
using UnityEngineInternal;
namespace UnityEngine
{
public class Component : Object
{
public extern Transform transform
{
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
}
}
调用this.transform实际上是一个调用intenal method的过程(这是用C/C++写的,不是MONO的)。值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。
估计大概的效率(没测试,以后有时间再弄,大家可以参考下文章最后的链接):
GetComponent是this.transform的10倍消耗时间。
this.transform是保存了引用myTransform的1.5倍的消耗时间。(因为新版优化了不少)
实际上:
如果你是偶尔调用一下transform的话,那就不要保留它的引用了,直接this.transform。
如果是Update中,每一帧都要改变的话,还是保留一下this.transform的引用吧。毕竟倘若一大堆东西的话,能快不少呢。

正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:
private Transform myTransform;
void Awake() {
myTransform = transform;
}
然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。
this.transform并不是变量,而是一个get/set属性(property)。
using System;
using System.Runtime.CompilerServices;
using UnityEngineInternal;
namespace UnityEngine
{
public class Component : Object
{
public extern Transform transform
{
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
}
}
调用this.transform实际上是一个调用intenal method的过程(这是用C/C++写的,不是MONO的)。值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。
估计大概的效率(没测试,以后有时间再弄,大家可以参考下文章最后的链接):
GetComponent是this.transform的10倍消耗时间。
this.transform是保存了引用myTransform的1.5倍的消...正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:
private Transform myTransform;
void Awake() {
myTransform = transform;
}
然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有直接的不用,还自己保存起来。
this.transform并不是变量,而是一个get/set属性(property)。
using System;
using System.Runtime.CompilerServices;
using UnityEngineInternal;
namespace UnityEngine
{
public class Component : Object
{
public extern Transform transform
{
[WrapperlessIcall]
[MethodImpl(MethodImplOptions.InternalCall)]
get;
}
}
}
调用this.transform实际上是一个调用intenal method的过程(这是用C/C++写的,不是MONO的)。值得注意的是这个调用方法略慢,因为你需要调用外部的CIL(aka interop),花费了额外的性能。
估计大概的效率(没测试,以后有时间再弄,大家可以参考下文章最后的链接):
GetComponent是this.transform的10倍消耗时间。
this.transform是保存了引用myTransform的1.5倍的消耗时间。(因为新版优化了不少)
实际上:
如果你是偶尔调用一下transform的话,那就不要保留它的引用了,直接this.transform。
如果是Update中,每一帧都要改变的话,还是保留一下this.transform的引用吧。毕竟倘若一大堆东西的话,能快不少呢。


关于为什么鎀ransform等引用效率会更高
正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:private Transform myTransform;void Awake() { myTransform = transform;} 然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有...

关于为什么鎀ransform等引用效率会更高
正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:private Transform myTransform;void Awake() { myTransform = transform;} 然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有...

关于为什么鎀ransform等引用效率会更高
正常来说,大部分同学一般get transform都直接gameobject.transform使用。但往往,你会发现有些人会将transform引用保存起来,例如:private Transform myTransform;void Awake() { myTransform = transform;} 然后使用myTransform替代this.transform。如果你不知道u3d内部实现获取方式你肯定会以为这人脑抽水了,有...

温宿县15898579322: 关于为什么鎀ransform等引用效率会更高 -
涂绍博思: 正常来说,大部分同学一般get transform都直接gameobject.transform使用.但往往,你会发现有些人会将transform引用保存起来,例如:private Transform myTransform;void Awake() {myTransform = transform;}然后使用myTransform替代this....

温宿县15898579322: 关于dll文件的引用问题 -
涂绍博思: DLL引用后,无法使用DLL或载入DLL在代码中的原因有以下几个.1. WINFORM中使用了ASP.NET的DLL,同理ASP.NET中引用了WINFORM的DLL.2. 使用了对应项目所不支持的类库,函数3. 强行硬编码了对应的项目所不支持的配置文件读取代码 如果您需要我详细解答,可能需要您给我更详细的内容.

温宿县15898579322: 在子窗体中怎么调用主窗体的控件 -
涂绍博思: 主窗体中引用子窗体中的控件,可以先引用子窗体的form属性后再引用子窗体控件属性.例如主窗体名为“ Form1”, 里面有一个子窗体名为“Child1”.现在要求点击主窗体命令按钮后将子窗体里文本框Text1里的内容显示为主窗体的标签,...

温宿县15898579322: c#为什么要有两种数据类型(值类型和引用类型) -
涂绍博思: 如果您这么问 那么我就假设您明白这两个的区别 为什么要有.我就大致解释一下 值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用.因此,一个值类型变量就永远不会影响到其他的值类型变量,...

温宿县15898579322: 怎么在其他类里调用窗体里控件的属性或方法 -
涂绍博思: 一楼正确...具体办法就是,在初使化时把FORM2时把FORM1的引用传给FORM2,那么 在FORM2里对FORM1做任何事情、 实现过程就是1.在FORM2里声明一个引用变量,然后在构造函数里 把传进来的引用赋值给这个变量,然后在FORM2里就可以做任何事情 比如在FORM2里写上这个 public Form1 f1; Form2(Form1 f1) { this.f1=f1; } 在F1里面 就可以像一楼写的那样 把F1的值传给Form2

温宿县15898579322: 在C#中值类型和引用类型有什么区别? -
涂绍博思: 值类型: 单元直接存放“有效值” 如: int a=3; 则a内存单元就放的是3 引用类型: 单元放的是另外一个对象的引用(地址) 如: Form form1=new Form(); 就是说,在内存中开辟了一个对象new Form(),form1内存单元存放的是那个对象的地址,并非对象本身

温宿县15898579322: 在程序中 Name 属性是作为对象的标识而引用,不会显示在窗体上,而控件上显示的内容由Caption 属性决定 -
涂绍博思: 并不是所有的控件都有Caption属性,比如有些控件本来就是显示图片用的,这跟Caption就没啥关系了.

温宿县15898579322: 我已经添加了引用,怎么还是找不到类型或命名空间名称 -
涂绍博思: 简便方法是你鼠标的光标移动在那个带有波浪线的类上,点击鼠标右键,选择解析,然后在选择using 对应的命名空间,如果鼠标右键找不到解析,则说明你的项目,没有引用好对应的.dll文件,方法是在界面右面工程上右击,选择”添加引用“,会弹出对话框,然后找到对应的.dll文件,引用进去就行了.

温宿县15898579322: JavaScript问题:关于引用页面元素
涂绍博思: 这两种方法是不是有所区别?还是说第二种更符合规范?为什么第二种要绕个弯来引用页面元素呢?请高手赐教,谢谢!ByName和ById,只是2种方式,还有ByClassName的. 其实并不是绕弯 比如 var temp1=document.getElementById("ID1") temp1就是你要操作的对象,这应该很直接

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网