ãšã³ããªãŒ
ç§ã¯ãŠããã£ã®è€éãã«ã€ããŠã¯ããŸãç¥ããŸããããªããªããç§ã¯ãããšããŠã§ã¯ãªããè¶£å³ãšããŠãããããããã§ãã éåžžãå¿
èŠã«å¿ããŠå¿
èŠãªãã®ããã¹ãŠå匷ããã®ã§ããã®èšäºã¯ç§ã®ãããªäººã察象ãšããŠããŸãã
ç§ã¯ãããããçµæã«ã€ããŠæžãå§ãã人ãšåãããã«ãïŒã·ã³ã°ã«ãã³ãããŒãžã£ãŒãFindãGetComponentãªã©ãä»ããïŒæãå¹³å¡ãªå¯Ÿè©±æ¹æ³ã§ã¯äžååã§ãããæ°ãããªãã·ã§ã³ãæ¢ãå¿
èŠãããããšã«ããã«æ°ä»ããŸããã
ãããŠãã¡ãã»ãŒãž/éç¥ã·ã¹ãã ãã·ãŒã³ã«å
¥ããŸã
ããŸããŸãªèšäºãèªã¿ããã®ã·ã¹ãã ãå®è£
ããããã®ããã€ãã®ç°ãªããªãã·ã§ã³ãèŠã€ããŸããã
ã»ãšãã©ã®èšäºã§ã¯ãç¹å®ã®ã¢ãããŒãã®ããã©ãŒãã³ã¹ããããã®æ¯èŒãªã©ã«é¢ããæ
å ±ã¯ã»ãšãã©ãããŸããã éåžžã ãæ¥µç«¯ãªå Žåã«ã®ã¿SendMessageã䜿çšãããŸã£ãã䜿çšããªãããšããé床ã«ã€ããŠã®èšåã®ã¿ããããŸãã
ããŠããã®ã¢ãããŒãã«ã¯é倧ãªé床ã®åé¡ãããããã§ãããä»ã®äººã¯ã©ãã§ããïŒ
ç§ã¯æ£æ°ãèŠã€ããããšãã§ããããã®è³ªåã«é¢ããæ
å ±ãæ³šæãïŒããããç§ã¯ã²ã©ãèŠãŠããŸããïŒãå®éšçã«ãããèŠã€ããããšã決å®ããåæã«ãããã®ã¢ãããŒããå®éã«è©ŠããŠã¿ãããšã«ããŸããã
ããã3ã€ã®ã¢ãããŒããšããªã³ã¯ã«ãããªããžã§ã¯ãã®éåžžã®çŽæ¥é¢æ°åŒã³åºããæ¯èŒããããšã«ããŸããã
ããŸããšããŠããªããžã§ã¯ããæ€çŽ¢ãããšãã«Findãã©ã®ããã«åäœããããèŠãŠã¿ãŸããããåUpdateïŒåå¿è
åãã®ãã¹ãŠã®ã¬ã€ããå«ãã§ããŸãïŒãé転ããŸããã
ã¹ã¯ãªããã®æºå
ãã¹ãã®ããã«ãã·ãŒã³äžã«2ã€ã®ãªããžã§ã¯ããäœæããå¿
èŠããããŸãã
- éä¿¡è
ã¯ããããSenderãšåŒã³ã Sender.csã¹ã¯ãªãããäœæããŠæ·»ä»ããŸã
- ã¬ã·ãŒããŒããããReceiverãšåŒã³ã Receiver.csã¹ã¯ãªãããäœæããŠã¢ã¿ããããŸã
ã¬ã·ãŒããŒReceiver.csããå§ããŸãããã ã³ãŒããå°ãªããªããŸãã
å®éã«ã¯ãæåã¯ãå€éšããåŒã³åºããã空ã®é¢æ°ã«éå®ããããšãèããŸããã ãããŠããã®ãã¡ã€ã«ã¯ã·ã³ãã«ã«èŠããã§ãããïŒ
using UnityEngine; public class Receiver : MonoBehaviour { public void TestFunction(string name) { } }
ããããåŸã§ããã¹ãŠã®åŒã³åºã/ã¡ãã»ãŒãžã®éä¿¡ã®å®è¡æéããéä¿¡è
ã ãã§ãªãåä¿¡è
ã§ãç¹å®ããããšã«ããŸããïŒä¿¡é Œæ§ã®ããïŒã
ããã«ã¯ã4ã€ã®å€æ°ãå¿
èŠã§ãã
float t_start = 0;
ãããŠã TestFunctions颿°ã远å ããŠã testIterationsã 1åå®äºããã®ã«ããã£ãæéãã«ãŠã³ããããã®æ
å ±ãã³ã³ãœãŒã«ã«åºåã§ããããã«ããŸãã åŒæ°ã§ã¯ãæååtestNameã䜿çšããŸãã ãã¹ãæååã«ã¯ããã¹ãããã¡ãœããã®ååãå
¥ããŸãã 颿°èªäœã¯ã誰ããããåŒã³åºãããç¥ããŸããã ãã®æ
å ±ã¯ãã³ã³ãœãŒã«ãžã®åºåã«ã远å ãããŸãã ãã®çµæã以äžãåŸãããŸãã
public void TestFunction(string testName) { count++;
ããã¯å®äºã§ãã ãã®é¢æ°ã¯ãããèªäœã®åŒã³åºããµã€ã¯ã«ã®å®è¡æéãèšç®ããåŒã³åºãã人ã®ååãšãšãã«ã³ã³ãœãŒã«ã«åºåããŸãã
éä¿¡è
ã«ãµãã¹ã¯ã©ã€ãããåŒã³åºãã®æ°ã倿Žããããã«æ»ããŸãïŒãã ããéä¿¡è
ã®åã倿°ã«ãã€ã³ãããŠã2ã€ã®å Žæã§å€æŽããªãããã«ãããã颿°ã«2çªç®ã®åŒæ°ãæž¡ããŸãããç§ãã¡ã¯ããã«æéãç¡é§ã«ããŸããïŒ
Receiver.csãå®å
šã« using UnityEngine; public class Receiver : MonoBehaviour { float t_start = 0;
æºåãå®äºããŸããã ãã¹ããæžãããšã«ããŸãã
ãã€ã¬ã¯ãã³ãŒã«æ©èœ
Sender.csã«ç§»åããæåã®ãã¹ãã®ã³ãŒããæºåããŸãã æãäžè¬çã§æãç°¡åãªãªãã·ã§ã³ã¯ãStartïŒïŒã§åä¿¡è
ã€ã³ã¹ã¿ã³ã¹ãèŠã€ãããã®ãªã³ã¯ãä¿åããããšã§ãã
using System; using UnityEngine; using UnityEngine.Events; public class Sender : MonoBehaviour { float t_start = 0;
DirectCallTest颿°ãèšè¿°ããŸããããã¯ãä»ã®ãã¹ãŠã®ãã¹ã颿°ã®ã¯ãŒã¯ããŒã¹ã«ãªããŸãã
float DirectCallTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { receiver.TestFunction("DirectCallTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; }
åå埩ã§ãã¬ã·ãŒããŒã§TestFunctionãåŒã³åºãããã¹ãã®ååãæž¡ããŸãã
ã³ã³ãœãŒã«ã«çµè«ãåºããŠãã®ãã¹ããéå§ããã®ã¯ä»ã®ãŸãŸãªã®ã§ãStartïŒïŒã«æ¬¡ã®è¡ã远å ããŸãã
void Start () { receiver = GameObject.Find("Receiver").GetComponent<Receiver>(); Debug.Log("DirectCallTest time = " + DirectCallTest()); }
ã§ããïŒ æåã®ããŒã¿ãèµ·åããŠååŸããŸãã ïŒSELFãšããåèªãå«ãçµæã¯ãåŒã³åºã颿°ã«ãã£ãŠäžããããSELFã䜿ããªãå Žåã¯åŒã³åºã颿°ã«ãã£ãŠäžããããããšãæãåºããŸãïŒ
ãã®ãããªãã¬ãŒãã«ããããé
眮ããŸãïŒ
ãã¹ãå | è©Šéšæé |
---|
DirectCallTestã¿ã€ã㌠| 0.0005178452 |
DirectCallTest SELFã¿ã€ã㌠| 0.0001906157 |
ïŒSELFãšããåèªãå«ãçµæã¯ãåŒã³åºã颿°ã«ãã£ãŠäžããããSELFã䜿ããªãå Žåã¯åŒã³åºã颿°ã«ãã£ãŠäžããããããšãæãåºããŸãïŒ
ãã®ãããã³ã³ãœãŒã«ã®ããŒã¿ãšè峿·±ãç»åã衚瀺ãããŸã-åä¿¡æ©ã®æ©èœã¯éä¿¡æ©ãããçŽ2.7åéãåäœããŸããã
ç§ã¯ãŸã ãããäœã«é¢é£ããŠãããçè§£ããŠããŸããã ãã¶ããåä¿¡æ©ã§ãæéãèšç®ããåŸãDebug.Logã远å ã§åŒã³åºããããããŸãã¯äœãä»ã®ãã®ã...誰ããç¥ã£ãŠãããªããç§ã«æžããŠãç§ã¯ãããèšäºã«è¿œå ããŸãã
ãããã«ããŠããããã¯ç§ãã¡ã«ãšã£ãŠç¹ã«éèŠã§ã¯ãããŸããã ç°ãªãå®è£
ãäºãã«æ¯èŒãããã®ã§ã次ã®ãã¹ãã«é²ã¿ãŸãã
SendMessageãä»ããŠã¡ãã»ãŒãžãéä¿¡ãã
誰ããå€ããŠèåŸ
ããŠãã...ããªããäœãã§ãããèŠãŠã¿ãŸãããã
ïŒå®éã«ã¯ãçŽæ¥åŒã³åºãã®ããã«ãªããžã§ã¯ããžã®åç
§ãå¿
èŠãªå Žåããªãå¿
èŠãªã®ãããããããŸãããã©ãããããããªãã¯ã¡ãœãããå®è¡ããªãããšã¯æããã§ã¯ãããŸããïŒ
SendMessageTest颿°ã远å ããŸãã
float SendMessageTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { receiver.SendMessage("TestFunction", "SendMessageTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; }
StartïŒïŒã®è¡ïŒ
Debug.Log("SendMessageTest time = " + SendMessageTest());
ãã®ãããªçµæãåŸãããŸãïŒããŒãã«ã®æ§é ãå°ã倿ŽããŸããïŒïŒ
ãã¹ãå | éä¿¡è
ãã¹ãæé | åä¿¡è
ãã¹ãæé |
---|
DirectCallTest | 0.0005178452 | 0.0001906157 |
SendMessageTest | 0.004339099 | 0.003759265 |
ãããŒãéãã¯äžæ¡ã§ãïŒ åŒãç¶ããã¹ããäœæããæçµçã«åæãè¡ããŸããããã«ããããã§ã«ãã¹ãŠã䜿çšã§ãã人ã¯ãåæãŸã§ã¹ã¯ããŒã«ã§ããŸãã ãããŠãããã¯ãç§ã®ããã«ãã³ã³ããŒãã³ãéã®çžäºäœçšã®ã·ã¹ãã ã®å®è£
ãèªåã§å匷ããéžæãã人ã察象ãšããŠããŸãã
Sender.csã« UnityEventãäœæã ããã®åŸãåä¿¡è
ã«çœ²åããŸãã
public static UnityEvent testEvent= new UnityEvent();
æ°ããUnityEventTest颿°ãäœæããŠããŸãã
float UnityEventTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { testEvent.Invoke("UnityEventTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; }
Sooooãã€ãã³ããçºçãããã¹ãŠã®çœ²åè
ã«ã¡ãã»ãŒãžãéä¿¡ãã ããã«ãUnityEventTestããéä¿¡ãããã®ã§ãããã€ãã³ãã¯åŒæ°ãåãå
¥ããŸããã
ããã¥ã¢ã«ãèªã¿ããã®ããã«UnityEventã¯ã©ã¹ã®ã¿ã€ããåå®çŸ©ããå¿
èŠãããããšãçè§£ããŸãã ãããè¡ããšãšãã«ããã®è¡ã«å€æŽãå ããŸãã
public static UnityEvent testEvent= new UnityEvent();
次ã®ã³ãŒãã倿ããŸãã
[Serializable] public class TestStringEvent : UnityEvent<string> { } public static TestStringEvent testStringEvent = new TestStringEvent();
UnityEventTestïŒïŒã§testEventãtestStringEventã«çœ®ãæããããšãå¿ããªãã§ãã ããã
次ã«ãã¬ã·ãŒããŒReceiver.csã®ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããŸãã
void OnEnable() { Sender.testStringEvent.AddListener(TestFunction); }
OnEnableïŒïŒã¡ãœããã§ãµãã¹ã¯ã©ã€ãããŠããªããžã§ã¯ããã·ãŒã³ã§ã¢ã¯ãã£ãåããããšãïŒäœææãå«ãïŒã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããããã«ããŸãã
ãŸãããªããžã§ã¯ããã¹ããŒãžäžã§åæïŒåé€ãå«ãïŒããããšãã«åŒã³åºãããOnDisableïŒïŒã¡ãœããã®ã€ãã³ãã®ãµãã¹ã¯ã©ã€ããè§£é€ããå¿
èŠããããŸããããã¹ãã«ã¯ãããå¿
èŠãªããããã³ãŒãã®ãã®éšåã¯èšè¿°ããŸããã§ããã
å§ããŸãã ãã¹ãŠããŸããããŸãïŒ æ¬¡ã®ãã¹ãã«åæ ŒããŸãã
åŒæ°ãšããŠã¡ãã»ãŒãžãéä¿¡ããæ©èœãæã€ã€ãã³ã/ããªã²ãŒããå®è£
ããå¿
èŠãããããšãå¿ããªãã§ãã ããã
Sender.cs sender ã§ ãã€ãã³ããšããªã²ãŒããäœæããŸãã
public delegate void EventDelegateTesting(string message); public static event EventDelegateTesting BeginEventDelegateTest;
æ°ãã颿°EventDelegateTestãäœæããŠããŸãã
float EventDelegateTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { BeginEventDelegateTest("EventDelegateTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; }
次ã«ãã¬ã·ãŒããŒReceiver.csã®ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããŸãã
void OnEnable() { Sender.testStringEvent.AddListener(TestFunction); Sender.BeginEventDelegateTest += TestFunction; }
èµ·åããŠç¢ºèªããŸãã çŽ æŽãããããã¹ãŠã®ãã¹ãã®æºåãã§ããŸããã
ããŒãã¹
èå³ãåŒãããã«ãDirectCallTestã¡ãœãããšSendMessageTestã¡ãœããã®ã³ããŒã远å ããŸããåå埩ã§ãã¢ã¯ã»ã¹ããåã«ã¹ããŒãžäžã®ãªããžã§ã¯ããæ€çŽ¢ããŸããããã«ãããæ°èŠãŠãŒã¶ãŒã¯ ããã®ãããªãšã©ãŒãçºçãããã³ã¹ããçè§£ã§ããŸãã
float DirectCallWithGettingComponentTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { GameObject.Find("Receiver").GetComponent<Receiver>().TestFunction("DirectCallWithGettingComponentTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; } float SendMessageTestWithGettingComponentTest() { t_start = Time.realtimeSinceStartup; for (int i = 0; i < testIterations; i++) { GameObject.Find("Receiver").GetComponent<Receiver>().SendMessage("TestFunction", "SendMessageTestWithGettingComponentTest"); } t_end = Time.realtimeSinceStartup; return t_end - t_start; }
çµæåæ
ãããã10,000åã®ç¹°ãè¿ãã®ãã¹ãŠã®ãã¹ããå®è¡ãããã®ãããªçµæãååŸããŸãïŒéä¿¡è
ïŒéä¿¡è
ïŒã®ãµã€ã¯ã«ã®å®è¡æéã§ããã«ãœãŒãããŸãããã®æ®µéã§ãåä¿¡è
ã®ãã¹ãæéãDebug.LogãåŒã³åºããŸããåŒã³åºããµã€ã¯ã«èªäœã®2åã®æéãããããŸããã
ãã¹ãå | éä¿¡è
ãã¹ãæé |
---|
DirectCallTest | 0.0001518726 |
EventDelegateTest | 0.0001523495 |
UnityEventTest | 0.002335191 |
SendMessageTest | 0.003899455 |
DirectCallWithGettingComponentTest | 0.007876277 |
SendMessageTestWithGettingComponentTest | 0.01255739 |
æç¢ºã«ããããã«ãããŒã¿ãèŠèŠåããŸãïŒåçŽã«ãã¹ãŠã®å埩ã®å®è¡æéãæ°Žå¹³ã«ãã¹ãã®ååïŒ

ãã¹ãã®ç²ŸåºŠãäžããŠãååŸ©åæ°ã1,000äžåã«å¢ãããŸãããã
ãã¹ãå | éä¿¡è
ãã¹ãæé |
---|
DirectCallTest | 0.1496105 |
EventDelegateTest | 0.1647663 |
UnityEventTest | 1.689937 |
SendMessageTest | 3.842893 |
DirectCallWithGettingComponentTest | 8.068002 |
SendMessageTestWithGettingComponentTest | 12.79391 |
ååãšããŠãäœãå€ãã£ãŠããŸããã éåžžã®ã€ãã³ã/ããªã²ãŒãã®ã¡ãã»ãŒãžã·ã¹ãã ã®é床ã¯ãUnityEventããããã«ã¯SendMessageã«ã€ããŠã¯èšããªããã€ã¬ã¯ãã³ãŒã«ãšã»ãšãã©å€ãããªãããšãæããã«ãªããŸãã
æåŸã®2åã¯ãã«ãŒã/æŽæ°ã§ãªããžã§ã¯ãæ€çŽ¢ã䜿çšããããšããããªããæ°žé ã«åŒãé¢ããšæããŸãã

ãããã«
å°ãã®ç ç©¶ãšããŠããŸãã¯ã€ãã³ãã·ã¹ãã ã®å°ããªã¬ã€ããšããŠã誰ããããã圹ã«ç«ã€ãšæãããšãé¡ã£ãŠããŸãã
çµæã®ãã¡ã€ã«ã®å®å
šãªã³ãŒãïŒ
Sender.cs using System; using System.Collections; using UnityEngine; using UnityEngine.Events; public class Sender : MonoBehaviour { [Serializable] public class TestStringEvent : UnityEvent<string> { } public delegate void EventDelegateTesting(string message); public static event EventDelegateTesting BeginEventDelegateTest; float t_start = 0;
Receiver.cs using UnityEngine; public class Receiver : MonoBehaviour { float t_start = 0;
--= =æŽæ°= =--
ç§ã¯èšäºã§ã³ã¡ã³ããããããã€ãã®éèŠãªãã€ã³ããæžããŸããïŒ
1.ãšãã£ã¿ãŒèªäœã§ãã¹ãããããšã¯äžå¯èœã§ãïŒã³ãŒãã¯åžžã«DEBUGã¢ãŒãã§ã³ã³ãã€ã«ãããŸãïŒãã¹ã¿ã³ãã¢ãã³ãã«ããåéããŠæž¬å®ããå¿
èŠããããŸãã
- Nåã®ç¹°ãè¿ãã®ã«ãŒããããã£ãŠçµæãååŸããããšã¯ã§ããŸããã Nåã®å埩ã§Måã®ãµã€ã¯ã«ãéå§ããå¹³åããå¿
èŠããããŸããããã«ãããããã»ããµãŒã®åšæ³¢æ°ã®å€æŽãªã©ãããŸããŸãªå¯äœçšãæ»ããã«ãªããŸãã
- æéã®ã«ãŠã³ãæ¹æ³ã倿Žããå¿
èŠããããŸã-Time.realtimeSinceStartupã®ç²ŸåºŠã¯äŸ¡å€ããããŸããã
ããã€ãã¯éåžžã«å®è³ªçã§ããããããããã®æç¢ºåã®ããã«çã«æè¬ããŸãã
ãšããã§ãããã¯ãã®èšäºã®ãã¹ãŠã§ã-EventãActionListãObserverãInterfaceObserverã®ããã©ãŒãã³ã¹ãã¹ã ã ãã®æ
å ±ãèªãã§æ€èšããããšããå§ãããŸãã
ãã¹ãã«ã€ããŠã¯-1ïŒããã³3ïŒä»ãã確èªããŸããããã€ã³ã2ïŒç¹ã«ãã¹ãã§ã¯ã¹ãããããŸãã ãã®å Žåãåçµæã®ç²ŸåºŠã远æ±ããã®ã§ã¯ãªããããããäºãã«æ¯èŒããŸãã ç§ã¯æã§ãã¹ããæ°åå®è¡ããŸããããçµæã«é倧ãªéžè±ã¯èŠãããŸããã§ããã®ã§ãä»ã®ãšãããããã¹ãããããŸãããïŒæãå±ãããããã®ç¬éã宿ããŸãïŒ
æåã«ç¢ºèªããã®ã¯
çµã¿ç«ãŠãããã¢ããªã±ãŒã·ã§ã³ã§ãã¹ããã
ããã§ã¯ãã¹ãŠãç°¡åã§ã-Windowsã§ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŸãïŒæåã«ãã¹ããéå§ããåã«5ç§ã®é
å»¶ã远å ããŸããäžãäžã«åããŠããã¹ãŠãæ£ç¢ºã«ããŒããããããã«ããŸãïŒã
次ã«ã Cã«ç§»åããŸãïŒ\ãŠãŒã¶ãŒ\ãŠãŒã¶ãŒå\ AppData \ LocalLow \ CompanyName \ ProductName \ output_log.txt
Windowsããæã¡ã®å ŽåïŒãŸãã¯ããã¥ã¡ã³ããã芧ãã ãã ïŒããã°ã調ã¹ãŠãã ããã
ãããŠãããã§ã¯è峿·±ãå€åãèŠãããŸãïŒ
- ãŸãããªãªãŒã¹ã§ã¯ãã¹ãŠããšãã£ã¿ãŒããã3ã10åéãåäœããããšãããããŸããã ããšãã°ãç§ã¯éããããã»ã©éèŠã ãšã¯æããªãã£ã/
- 第äºã«ãç¹°ãè¿ãããšã«ãªããžã§ã¯ããæ€çŽ¢ããçŽæ¥åŒã³åºãã¯ããã»ã©é
ããªãããšãåŠã³ãŸãã ãã¡ãããUnityEventsããã¯é
ãã§ãããSendMessageããããã§ã«é«éã§ãã ãããããäºå®ã¯ãã¹ããŒãžäžã«ãªããžã§ã¯ããã»ãšãã©ãªããšããããšã§ã...ãããåå¥ã«èª¿ã¹ãå¿
èŠããããŸã
ä»åã®ãªãªãŒã¹ã§ã¯ãã®ãããªæ¯èŒãè¡ãããŸã

äžèšã®2ã€ã®ãã¹ãã§äº€æãããå Žæã«å ããŠãä»ã«å€æŽã¯ãªããã°ã©ãã¯ãããã°æãšåãããã«èŠããŸãã DirectCallãšDelegateEventã¯ãUnityEventããã®ä»ã®ã€ãã³ããããé«éã§ã
æéã«ãŠã³ããæé©åããŸã
ãã€ã³ã2ïŒã®ããã«ãæéèšç®ã®æé©åã«ãã£ãŠåã®èª¿æŽã«å€åãçããããšã¯ã»ãšãã©ãããŸãããããã®2ã€ã®ã¢ãããŒãã倧ããç°ãªãç¹ãèŠã€ããããã«ãã®ãã€ã³ããè¡ããŸãã 远ãããã
以äžã®ãã¹ãŠã倿ŽããŸãã
t_start = Time.realtimeSinceStartup; t_end = Time.realtimeSinceStartup; return t_end - t_start;
ãªã³ïŒ
ïŒæåŸã«ãæçµçãªã³ãŒãå
šäœãã¬ã€ã¢ãŠãããŸãïŒ
ãããã£ãŠãååŸããããŒã¿ã調ã¹ããšãTime.realtimeSinceStartupãšSystem.Diagnostics.Stopwatchã®éãã¯ãã®ã±ãŒã¹ã§ã¯éèŠã§ã¯ãªãããšã©ãŒã«èµ·å ããŠãããšèšããŸãïŒå®éãDirectCallWithGettingComponentTestãã¹ãã§ã¯ããããã°ããŒãžã§ã³ã§ã¯ã»ãŒ4åã®éãããããŸããããªãªãŒã¹ã§ã¯å
šäœã®æ¯çãåã³æ»ããŸãããããèŠçŽè¡šã§ç¢ºèªããŠãã ããã ç§ãèšã£ãããã«-ãã£ãŒãã®ãã¥ãŒã¯å€æŽãããŠããŸããïŒ

ãã¹ãŠã®å€ïŒ1000äžåã®å埩ã®å®è¡ã«è²»ããããæéïŒã§æçµçãäœæããŸãã ç°ãªãããŒãžã§ã³ã®ãããã°/ãªãªãŒã¹ããŠããã£/ cïŒæéïŒæéæž¬å®æ¹æ³ïŒã®ææ°ãã¹ãã®ããŒã¿ïŒ
ãã¹ãå | ãããã°ãUnityæé | ãããã°ãCïŒæé | ãªãªãŒã¹ãçµ±äžæé | ãªãªãŒã¹ãCïŒæé |
---|
DirectCallTest | 0.1496105 | 0.15 | 0,0498426 | 0,047 |
EventDelegateTest | 0.1647663 | 0.155 | 0,0478754 | 0,047 |
UnityEventTest | 1,689937 | 1,657 | 0,5706475 | 0.462 |
DirectCallWithGettingComponentTest | 8,068002 | 2,112 | 0.8793411 | 0.851 |
SendMessageTest | 3.842893 | 3,938 | 1,364239 | 1,375 |
SendMessageTestWithGettingComponentTest | 12.79391 | 6,752 | 2,250246 | 2,244 |
èŠçŽãããšããªãªãŒã¹ããŒãžã§ã³ã§ã¯æéãæž¬å®ããæ°ããæ¹æ³ã§å®è¡é床ã倧å¹
ã«å€æŽãããŸãããããã¹ãå®è¡æéã®æ¯çã¯å€æŽãããŠããŸããã DirectCallãšEventDelegateã¯äŸç¶ãšããŠãªãŒããŒã§ãããUnityEventããã10åé«éã§ãã ãã ããåå埩ã§ãªããžã§ã¯ããæ€çŽ¢ããDirectCallã¯ãéåžžã®SendMessageããã远ãè¶ããŸããã
ãŸãããã®æŽæ°ããããªãªãŒã¹ã®ããŒãžã§ã³ããšãã£ã¿ãŒããã3ã10åéãããšãããããŸããã
PSçµæã«ã¯ãåèšå®è¡æéã§ã¯ãªãã1åã®å埩ã®å®è¡æéãå¿
èŠã§ãããšããã³ã¡ã³ãããããŸããã ç§ãã¡ã®å Žåããããå¿
èŠã ãšã¯æããŸããã ãããã®æ°å€ã¯äºãã«åæ¯äŸãããããã«ç°ãªãçš®é¡ã®ãã£ãŒããç¹ã«çµè«ã®ã¿ã倿ŽãããŸãã
䜿çšãããæç®ïŒ
ãæž
èŽããããšãããããŸããïŒ