You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
525 lines
16 KiB
525 lines
16 KiB
1 month ago
|
using UnityEngine;
|
||
|
using System.Collections;
|
||
|
using XLua;
|
||
|
using System.IO;
|
||
|
using System;
|
||
|
|
||
|
[LuaCallCSharp]
|
||
|
public static class TestUtils
|
||
|
{
|
||
|
public static bool IsAndroid()
|
||
|
{
|
||
|
#if UNITY_ANDROID
|
||
|
return true;
|
||
|
#else
|
||
|
return false;
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[CSharpCallLua]
|
||
|
public delegate void PerfTest(int load);
|
||
|
|
||
|
public class PerfMain : MonoBehaviour {
|
||
|
string resultPath = "";
|
||
|
|
||
|
LuaEnv luaenv;
|
||
|
|
||
|
StreamWriter sw;
|
||
|
|
||
|
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
|
||
|
|
||
|
// Use this for initialization
|
||
|
void Start () {
|
||
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
||
|
resultPath = "/sdcard/testResult_android.log";
|
||
|
#elif UNITY_IPHONE || UNITY_IOS
|
||
|
resultPath = Application.persistentDataPath + "/testResult_iOS.log";
|
||
|
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
|
||
|
resultPath = Application.dataPath + "/../testResult_windows.log";
|
||
|
#else
|
||
|
resultPath = "";
|
||
|
#endif
|
||
|
var start = Time.realtimeSinceStartup;
|
||
|
var startMem = System.GC.GetTotalMemory(true);
|
||
|
luaenv = new LuaEnv();
|
||
|
Debug.Log("start cost: " + (Time.realtimeSinceStartup - start));
|
||
|
var endMem = System.GC.GetTotalMemory(true);
|
||
|
Debug.Log("startMem: " + startMem + ", endMem: " + endMem + ", " + "cost mem: " + (endMem - startMem));
|
||
|
luaenv.DoString("require 'luaTest'");
|
||
|
}
|
||
|
|
||
|
// Update is called once per frame
|
||
|
void Update () {
|
||
|
|
||
|
}
|
||
|
|
||
|
void OnGUI()
|
||
|
{
|
||
|
if (GUI.Button (new Rect (10, 100, 300, 150), "Start")) {
|
||
|
FileStream fs = new FileStream(resultPath, FileMode.Create);
|
||
|
sw = new StreamWriter(fs);
|
||
|
|
||
|
StartCSCallLua();
|
||
|
StartLuaCallCS ();
|
||
|
StartAddRemoveCB ();
|
||
|
StartCSCallLuaCB ();
|
||
|
StartConstruct ();
|
||
|
|
||
|
sw.Close ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
const double TEST_MIN_DURATION = 800;
|
||
|
const double TEST_DURATION = 1000;
|
||
|
|
||
|
private int PerformentTest(string title, int load, PerfTest execute)
|
||
|
{
|
||
|
stopWatch.Reset();
|
||
|
stopWatch.Start();
|
||
|
execute(load);
|
||
|
stopWatch.Stop();
|
||
|
|
||
|
/*int load_added = 0;
|
||
|
|
||
|
if (stopWatch.ElapsedMilliseconds < (TEST_MIN_DURATION))
|
||
|
{
|
||
|
double dur_added = TEST_DURATION - stopWatch.ElapsedMilliseconds;
|
||
|
load_added = (int)(load * (dur_added / stopWatch.ElapsedMilliseconds));
|
||
|
}
|
||
|
|
||
|
if (load_added > 0)
|
||
|
{
|
||
|
stopWatch.Start();
|
||
|
execute(load_added);
|
||
|
stopWatch.Stop();
|
||
|
}
|
||
|
|
||
|
int cps = CPS(load + load_added, stopWatch.ElapsedMilliseconds);*/
|
||
|
|
||
|
int cps = CPS(load, stopWatch.ElapsedMilliseconds);
|
||
|
|
||
|
if (title != null)
|
||
|
{
|
||
|
string log = title + cps + ", elapsed :" + stopWatch.ElapsedMilliseconds;
|
||
|
Debug.Log(log);
|
||
|
sw.WriteLine(log);
|
||
|
}
|
||
|
|
||
|
return cps;
|
||
|
}
|
||
|
|
||
|
private void StartCSCallLua()
|
||
|
{
|
||
|
int LOOP_TIMES = 1000000;
|
||
|
Debug.Log ("C# call lua :");
|
||
|
sw.WriteLine ("C# call lua :");
|
||
|
|
||
|
FuncBasePara funcBaseParm = luaenv.Global.Get<FuncBasePara>("FuncBasePara");
|
||
|
PerformentTest("C# call lua : base parameter function :", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
funcBaseParm(i);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
FuncClassPara funcClassPara = luaenv.Global.Get<FuncClassPara> ("FuncClassPara");
|
||
|
ParaClass paraClass = new ParaClass ();
|
||
|
PerformentTest("C# call lua : class parameter function :", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
funcClassPara(paraClass);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
FuncStructPara funcStructPara = luaenv.Global.Get<FuncStructPara> ("FuncStructPara");
|
||
|
ParaStruct paraStruct = new ParaStruct ();
|
||
|
PerformentTest("C# call lua : struct parameter function :", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
funcStructPara(paraStruct);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
FuncTwoBasePara funcTwoBasePara = luaenv.Global.Get<FuncTwoBasePara> ("FuncTwoBasePara");
|
||
|
PerformentTest("C# call lua : two base parameter function :", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
funcTwoBasePara(i, i);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
sw.WriteLine ("C# access lua table : ");
|
||
|
|
||
|
ITableAccess iTAccess = luaenv.Global.Get<ITableAccess> ("luaTable");
|
||
|
PerformentTest("C# access lua table : access member, get : ", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
int x = iTAccess.id;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
PerformentTest("C# access lua table : access member, set : ", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
iTAccess.id = 0;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
PerformentTest("C# access lua table : access member function : ", LOOP_TIMES, loop_times =>
|
||
|
{
|
||
|
for (int i = 0; i < loop_times; i++)
|
||
|
{
|
||
|
iTAccess.func();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
}
|
||
|
|
||
|
private void StartLuaCallCS()
|
||
|
{
|
||
|
int LOOP_TIMES = 1000000;
|
||
|
|
||
|
Debug.Log ("lua call C# member : ");
|
||
|
sw.WriteLine ("lua call C# member : ");
|
||
|
|
||
|
PerfTest func = luaenv.Global.Get<PerfTest> ("LuaAccessCSBaseMember_get");
|
||
|
PerformentTest("lua call C# member : base member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSBaseMember_set");
|
||
|
PerformentTest("lua call C# member : base member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSClassMember_get");
|
||
|
PerformentTest("lua call C# member : class member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSClassMember_set");
|
||
|
PerformentTest("lua call C# member : class member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessStructMember_get");
|
||
|
PerformentTest("lua call C# member : struct member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessStructMember_set");
|
||
|
PerformentTest("lua call C# member : struct member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessVec3Member_get");
|
||
|
PerformentTest("lua call C# member : vector3 member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessVec3Member_set");
|
||
|
PerformentTest("lua call C# member : vector3 member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
Debug.Log ("lua call C# member funtion : ");
|
||
|
sw.WriteLine ("lua call C# member funtion : ");
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSBaseMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : base parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSClassMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : class parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStructMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : struct parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSVec3MemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : vector3 parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSInMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : input parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSOutMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : output parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSInOutMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : in & output parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSTwoMemberFunc");
|
||
|
PerformentTest("lua call C# member funtion : two parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
Debug.Log ("lua call static memeber : ");
|
||
|
sw.WriteLine ("lua call static memeber :");
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticBaseMember_get");
|
||
|
PerformentTest("lua call C# static member : base member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSStaticBaseMember_set");
|
||
|
PerformentTest("lua call C# static member : base member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticClassMember_get");
|
||
|
PerformentTest("lua call C# static member : class member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSStaticClassMember_set");
|
||
|
PerformentTest("lua call C# static member : class member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticStructMember_get");
|
||
|
PerformentTest("lua call C# static member : struct member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSStaticStructMember_set");
|
||
|
PerformentTest("lua call C# static member : struct member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticVec3Member_get");
|
||
|
PerformentTest("lua call C# static member : vector3 member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSStaticVec3Member_set");
|
||
|
PerformentTest("lua call C# static member : vector3 member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
Debug.Log ("lua call C# static member funtion : ");
|
||
|
sw.WriteLine ("lua call C# member funtion : ");
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticBaseMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : base parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticClassMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : class parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticStructMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : struct parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticVec3MemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : vector3 parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticInMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : input parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticOutMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : output parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticInOutMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : in & output parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaAccessCSStaticTwoMemberFunc");
|
||
|
PerformentTest("lua call C# static member funtion : two parameter member function : ", LOOP_TIMES, func);
|
||
|
|
||
|
Debug.Log("lua call C# array & num : ");
|
||
|
sw.WriteLine("lua call C# array & enum : ");
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSEnumFunc_get");
|
||
|
PerformentTest("lua call C# member : enum member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSEnumFunc_set");
|
||
|
PerformentTest("lua call C# member : enum member, set : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSArrayFunc_get");
|
||
|
PerformentTest("lua call C# member : array member, get : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest>("LuaAccessCSArrayFunc_set");
|
||
|
PerformentTest("lua call C# member : array member, set : ", LOOP_TIMES, func);
|
||
|
}
|
||
|
|
||
|
private void StartConstruct()
|
||
|
{
|
||
|
int LOOP_TIMES = 1000000;
|
||
|
Debug.Log ("lua call construct :");
|
||
|
sw.WriteLine("lua call construct :");
|
||
|
PerfTest func = luaenv.Global.Get<PerfTest> ("LuaConstructClass");
|
||
|
PerformentTest("lua construct class : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaConstructStruct");
|
||
|
PerformentTest("lua construct struct : ", LOOP_TIMES, func);
|
||
|
}
|
||
|
|
||
|
private void StartAddRemoveCB()
|
||
|
{
|
||
|
int LOOP_TIMES = 200000;
|
||
|
Debug.Log ("lua add & remove callback : ");
|
||
|
sw.WriteLine ("lua add & remove call back : ");
|
||
|
|
||
|
PerfTest func = luaenv.Global.Get<PerfTest> ("LuaAddRemoveCB");
|
||
|
PerformentTest("lua add & remove callback : ", LOOP_TIMES, func);
|
||
|
}
|
||
|
|
||
|
private void StartCSCallLuaCB()
|
||
|
{
|
||
|
int LOOP_TIMES = 1000000;
|
||
|
Debug.Log ("C# call lua callbak :");
|
||
|
sw.WriteLine ("C# call lua callbak :");
|
||
|
|
||
|
PerfTest func = luaenv.Global.Get<PerfTest> ("LuaBaseParaCB");
|
||
|
PerformentTest("invoke base param callback : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaClassParaCB");
|
||
|
PerformentTest("invoke class param callback : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaStructParaCB");
|
||
|
PerformentTest("invoke struct param callback : ", LOOP_TIMES, func);
|
||
|
|
||
|
func = luaenv.Global.Get<PerfTest> ("LuaVec3ParaCB");
|
||
|
PerformentTest("invoke vector3 param callback : ", LOOP_TIMES, func);
|
||
|
}
|
||
|
//------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
private int CPS(int loop_times, double ms)
|
||
|
{
|
||
|
return (int)(((double)loop_times) * 1000.0 / ms);
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------------------------------
|
||
|
[CSharpCallLua]
|
||
|
public delegate void FuncBasePara(int x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void FuncClassPara(ParaClass x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void FuncStructPara(ParaStruct x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void FuncTwoBasePara(int x, int y);
|
||
|
|
||
|
}
|
||
|
|
||
|
[CSharpCallLua]
|
||
|
public delegate void BaseParaEventHandler(int x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void ClassParaEventHandler(ParaClass x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void StructParaEventHandler(ParaStruct x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void Vec3ParamEventHandler(Vector3 x);
|
||
|
[CSharpCallLua]
|
||
|
public delegate void NullEventHandler();
|
||
|
|
||
|
[LuaCallCSharp]
|
||
|
public class ParaClass
|
||
|
{}
|
||
|
|
||
|
[GCOptimize]
|
||
|
[LuaCallCSharp]
|
||
|
public struct ParaStruct
|
||
|
{}
|
||
|
|
||
|
[CSharpCallLua]
|
||
|
public interface ITableAccess
|
||
|
{
|
||
|
int id { get; set;}
|
||
|
void func();
|
||
|
}
|
||
|
|
||
|
[LuaCallCSharp]
|
||
|
public class ClassLuaCallCS
|
||
|
{
|
||
|
public int[] array = new int[5];
|
||
|
|
||
|
[LuaCallCSharp]
|
||
|
public enum LuaEnum
|
||
|
{
|
||
|
ONE,
|
||
|
TWO,
|
||
|
THREE,
|
||
|
FOUR,
|
||
|
FIVE
|
||
|
};
|
||
|
|
||
|
public LuaEnum enumParam;
|
||
|
|
||
|
|
||
|
public event BaseParaEventHandler BaseParaEvent;
|
||
|
public event ClassParaEventHandler ClassParaEvent;
|
||
|
public event StructParaEventHandler StructParaEvent;
|
||
|
public event Vec3ParamEventHandler Vec3ParaEvent;
|
||
|
public event NullEventHandler NullEvent;
|
||
|
|
||
|
public int id;
|
||
|
public ParaClass paraClass = new ParaClass ();
|
||
|
public ParaStruct paraStruct = new ParaStruct();
|
||
|
public Vector3 vec3Member;
|
||
|
|
||
|
public void funcBaseParam(int x)
|
||
|
{}
|
||
|
|
||
|
public void funcClassParam(ParaClass x)
|
||
|
{}
|
||
|
|
||
|
public void funcStructParam(ParaStruct x)
|
||
|
{}
|
||
|
|
||
|
public void funcVec3Param(Vector3 x)
|
||
|
{}
|
||
|
|
||
|
public void funcInParam(ref int x)
|
||
|
{}
|
||
|
|
||
|
public void funcOutParam(out int x)
|
||
|
{
|
||
|
x = 0;
|
||
|
}
|
||
|
|
||
|
public void funcInOutParam(ref int x, out int y)
|
||
|
{
|
||
|
y = 0;
|
||
|
}
|
||
|
|
||
|
public void funcTwoParam(int x, int y)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public static int sId;
|
||
|
public static ParaClass sParamClass = new ParaClass();
|
||
|
public static ParaStruct sParamStruct = new ParaStruct();
|
||
|
public static Vector3 sParamVec3;
|
||
|
|
||
|
public static void sFuncBaseParam(int x)
|
||
|
{}
|
||
|
|
||
|
public static void sFuncClassParam(ParaClass x)
|
||
|
{}
|
||
|
|
||
|
public static void sFuncStructParam(ParaStruct x)
|
||
|
{}
|
||
|
|
||
|
public static void sFuncVec3Param(Vector3 x)
|
||
|
{}
|
||
|
|
||
|
public static void sFuncInParam(ref int x)
|
||
|
{}
|
||
|
|
||
|
public static void sFuncOutParam(out int x)
|
||
|
{
|
||
|
x = 0;
|
||
|
}
|
||
|
|
||
|
public static void sFuncInOutParam(ref int x, out int y)
|
||
|
{
|
||
|
y = 0;
|
||
|
}
|
||
|
|
||
|
public static void sFuncTwoParam(int x, int y)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public void InvokeBaseParaCB()
|
||
|
{
|
||
|
for (int i = 0; i < 1000000; i++) {
|
||
|
BaseParaEvent(0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void InvokeClassParaCB()
|
||
|
{
|
||
|
ParaClass paraCls = new ParaClass ();
|
||
|
for (int i = 0; i < 1000000; i++) {
|
||
|
ClassParaEvent(paraCls);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void InvokeStructParaCB()
|
||
|
{
|
||
|
ParaStruct paraStruct = new ParaStruct ();
|
||
|
for (int i = 0; i < 1000000; i++) {
|
||
|
StructParaEvent(paraStruct);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void InvokeVec3ParaCB()
|
||
|
{
|
||
|
Vector3 paraVec3 = new Vector3 (0, 0, 0);
|
||
|
for (int i = 0; i < 1000000; i++) {
|
||
|
Vec3ParaEvent(paraVec3);
|
||
|
}
|
||
|
}
|
||
|
}
|