性能优化:对字典键使用InstanceID

如果我们在项目中需要使用MonoBehaviour或ScriptableObject引用作为字典键时,会导致一些性能慢的一些问题。我们可以使用Object.GetInstanceID()改进,它返回一个整数,用于表示该对象的唯一标志值,在整个程序声明周期中,该值都不会发生变化,如果我们将其“缓存”在对象中,并将其作为字典中键,那么元素的比较将比直接使用对象引用快2至3倍。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
 * Author:W
 * 预设体
 */
public class PrefabObj : MonoBehaviour {

	public int InstanceID;
	private PrefabSystem PrefabSystem;

	void Awake()
	{
		InstanceID = GetInstanceID();
		Debug.Log("当前游戏对象的 InstanceID====="+InstanceID);
	}

	// Use this for initialization
	void Start()
	{
		PrefabSystem = this.transform.parent.GetComponent<PrefabSystem>();
	}


	public void Init()
	{
		GameObjectInfo info = PrefabSystem.GetGameObjectInfo(InstanceID);
		//----------
	}

	
	
	// Update is called once per frame
	void Update () {
		
	}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class GameObjectInfo
{
	public string Name;
	public float Health;
}

public class PrefabSystem : MonoBehaviour {

	public GameObject Prefab;

	private Dictionary<int, GameObjectInfo> ObjDict = new Dictionary<int, GameObjectInfo>();


	// Use this for initialization
	void Start () {

		for (int i = 0; i < 1000; i++)
		{
			GameObject obj = GameObject.Instantiate(Prefab) as GameObject;
			obj.transform.SetParent(this.transform);
			obj.transform.localPosition = Vector3.one;
			obj.transform.localRotation =Quaternion.identity;
			obj.transform.localScale = Vector3.one;

			obj.SetActive(true);

			GameObjectInfo info = new GameObjectInfo();

			int id = obj.GetComponent<PrefabObj>().InstanceID;
			if (!ObjDict.ContainsKey(id))
				ObjDict.Add(id, info);
		}

	}

    
	public GameObjectInfo GetGameObjectInfo(int ID)
	{
		if (ObjDict.ContainsKey(ID))
		{
			return ObjDict[ID];
		}

		return null;
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要获取某个字段的值,你可以使用JSON解析方法。在这个例子中,你可以使用以下步骤获取"applyUserId"字段的值: 1. 首先,将JSON字符串解析成一个对象或字典。具体的方法可能会因你使用的编程语言而有所不同。在大多数编程语言中,你可以使用内置的JSON解析函数或库来完成这个步骤。 2. 一旦你将JSON解析为对象或字典,你可以通过指定字段名来访问该字段的值。在这个例子中,你可以使用"applyUserId"来获取"applyUserId"字段的值。 以下是一个示例代码片段,使用Python语言来解析JSON并获取"applyUserId"字段的值: ```python import json json_data = ''' { "comment": "同意", "pass": "true", "formData": { "faultEscalateTime": "2023-07-12T15:03:55.000+0800", "reviewedTime": "", "remark": "", "updateTime": "2023-07-12T15:04:04.000+0800", "delFlag": "0", "reviewedBy": "", "faultCause": "苏打水", "busTaskId": "WX_20230712", "applyUserId": "余征", "maintenanceStatus": "是的是的343434", "symptoms": "是的是的", "applyUserName": "余征", "createBy": "", "instanceId": "17502", "createTime": "2023-07-12T15:03:55.000+0800", "updateBy": "余征", "processKey": "maintenance", "id": 35, "applyTime": "2023-07-12T15:04:04.000+0800", "assignTime": "2023-07-12T15:03:55.000+0800" } } ''' # 解析JSON data = json.loads(json_data) # 获取"applyUserId"字段的值 apply_user_id = data["formData"]["applyUserId"] print(apply_user_id) ``` 运行以上代码,你将会得到输出: ``` 余征 ``` 这样,你就成功获取到了"applyUserId"字段的值。根据你使用的编程语言和具体的JSON解析方法,代码细节可能会有所不同,但基本思路是相似的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值