private static void GetTextRootProbability(this HtmlNode node, ParaClass paraClass) { if (ignores.Any(ignore => node.Name.ToLower().Contains(ignore))) { return; } if (node.ChildNodes.Count == 0) { var text = node.InnerText.Trim(); if ((string.IsNullOrEmpty(text) == false)) { var textlen = text.Length; if (textlen > paraClass.tLen) { paraClass.tLen = textlen; paraClass.Path = node.XPath; } } } else { foreach (var childNode in node.ChildNodes) { GetTextRootProbability(childNode, paraClass); } } }
public static string GetTextNode(this HtmlNode node) { var para = new ParaClass(); node.GetTextRootProbability(para); return(XPath.SubXPath(para.Path, -2)); }
/// <summary> /// 取出 Main 方法中 para 的值複製一份到 Function03 方法中的 para(兩個 para 的變數位址不同) /// </summary> /// <param name="para"></param> /// <returns></returns> private static ParaClass Function03(ParaClass para) { Console.WriteLine($"進入方法Function03時候,para實體中val值為 {para.val}"); para.val = 50; Console.WriteLine($"在Function03方法裡重新指派值給para的val,para實體中的val值為 {para.val}"); para = new ParaClass(); Console.WriteLine($"在Function03方法裡重新產生ParaClass的實體para,para實體中的val值為 {para.val}"); return(para); }
private static ParaClass Function04(ref ParaClass para2) { Console.WriteLine($"進入方法Function04時候,para2實體中val值為 {para2.val}"); para2.val = 500; Console.WriteLine($"在Function04方法裡重新指派值給para2的val,para2實體中的val值為 {para2.val}"); para2 = new ParaClass(); Console.WriteLine($"在Function04方法裡重新產生ParaClass的實體para,para實體中的val值為 {para2.val}"); return(para2); }
public void InvokeClassParaCB() { ParaClass paraCls = new ParaClass(); for (int i = 0; i < 1000000; i++) { ClassParaEvent(paraCls); } }
static void Main(string[] args) { int val = 0; Console.WriteLine($"val的初始值為 {val}"); int res = Function01(val); Console.WriteLine($"退出Function01方法回到Main方法後,val的值為 {val}"); Console.WriteLine("-----------------------------------------------------------------------"); int val2 = 0; Console.WriteLine($"val的初始值為 {val2}"); int res02 = Function02(ref val2); Console.WriteLine($"退出Function02方法回到Main方法後,val2的值為 {val2}"); Console.WriteLine("-----------------------------------------------------------------------"); ParaClass para = new ParaClass(); //先實體化ParaClass,配給para Console.WriteLine($"para實體中的val初始值為 {para.val}"); ParaClass r = Function03(para); Console.WriteLine($"退出Function03方法回到Main方法後,para實體中的val值為 {para.val}"); Console.WriteLine("-----------------------------------------------------------------------"); ParaClass para2 = new ParaClass(); Console.WriteLine($"para2實體中的val初始值為 {para2.val}"); ParaClass res03 = Function04(ref para2); Console.WriteLine($"退出Function04方法回到Main方法後,para2實體中的val值為 {para2.val}"); Console.WriteLine("Function04 回傳的實體中的 val 的值為 " + para2.val.ToString()); Console.WriteLine("-----------------------------------------------------------------------"); ParaClass p = new ParaClass(); ParaClass r1 = ChangeByValue(p); Console.WriteLine(string.Format("r1 和 p 指向同實體 : {0}", (r1 == p))); ParaClass r2 = ChangeByRef(ref p); Console.WriteLine(string.Format("r2 和 p 指向同實體 : {0}", (r2 == p))); Console.WriteLine("-----------------------------------------------------------------------"); int v1 = 0, v2; //ref 必須先將參數做初始化而out則不需要 var result = Function05(ref v1, out v2); Console.WriteLine($"v1 為ref值 : {v1} v2 為out值 : {v2}"); Console.WriteLine("-----------------------------------------------------------------------"); int v3 = 0, v4, v5 = 99;//ref & in 必須先將參數做初始化而out則不需要 var result02 = Function06(ref v3, out v4, in v5); Console.WriteLine($"v3 為ref值 : {v3} v4 為out值 : {v4} v5 為in值 : {v5}"); Console.ReadKey(); }
public static string GetTextNode(this HtmlNode node) { var para = new ParaClass(); node.GetTextRootProbability(para); var path = new XPath(para.Path); return(path.SubXPath(0, path.Count - 2).ToString()); }
private static void DoSaveLog(DbType t, string logType, string program, string startTime, string function, string error_message, string exception_trace, string param_value, bool saveScreenShot) { ParaClass pC = new ParaClass(t, logType, TruncateString(program, 50), TruncateString(function, 50), TruncateString(error_message, 2000), TruncateString(exception_trace, 2000), TruncateString(param_value, 2000), saveScreenShot, startTime); Thread th = new Thread(new ParameterizedThreadStart(SaveToDb)); th.Start(pC); //return SaveToDb(t, logType, program, function, error_message, exception_trace, param_value, saveScreenShot, clientName); }
private static ParaClass ChangeByRef(ref ParaClass p) { p = new ParaClass(); return(p); }
//pass by value傳遞,array變數是另開一個空間(0x20),來存這個陣列的所在位置(0x10),但透過pass by referencs,ref array變數的位置就是跟原本arr變數一樣(0x00),所以value也一樣(0x10)。 //差別就是,如果你在函式內想new一個陣列給array(等於給array變數新的參考),就會發現pass by value完全沒有改變, //因為array跟原本的arr完全沒有關係,而pass by reference就成功new了 //http://davidhsu666.com/archives/c-sharp-call-by-value-and-call-by-reference-and-equals/ //https://dotblogs.com.tw/daniel/2018/02/26/150443 private static ParaClass ChangeByValue(ParaClass p) { p = new ParaClass(); return(p); }
public static void sFuncClassParam(ParaClass x) { }
public void funcClassParam(ParaClass x) { }
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 static void GetTextRootProbability(this HtmlNode node, ParaClass paraClass) { if (ignores.Any(ignore => node.Name.ToLower().Contains(ignore))) return; if (node.ChildNodes.Count == 0) { var text = node.InnerText.Trim(); if ((string.IsNullOrEmpty(text) == false)) { var textlen = text.Length; if (textlen > paraClass.tLen) { paraClass.tLen = textlen; paraClass.Path = node.XPath; } } } else { foreach (var childNode in node.ChildNodes) { GetTextRootProbability(childNode, paraClass); } } }
public static string GetTextNode(this HtmlNode node) { var para = new ParaClass(); node.GetTextRootProbability(para); var path = new XPath(para.Path); return path.SubXPath(0, path.Count - 2).ToString(); }
//private static string SaveToDb(DbType t, string recordType, string program, // string function, string error_message, string exception_trace, string param_value, bool saveScreenShot,string client) private static void SaveToDb(object p) { ParaClass pC = (ParaClass)p; string dbName = TruncateString(GetDbName(pC.dbType), 50); string clientName = TruncateString(GetClientName(), 50); string ip = TruncateString(GetLocalIP(), 50); try { string sql = ""; byte[] b = null; if (pC.saveScreenShot) { b = GetScreenSnapShot(); } if (pC.dbType == DbType.Oracle) { Oracle oracle = GetOracleDbInstance(); //sql = "INSERT INTO LITEON.DNS_PROGRAM_EXEC_LOG(DB_NAME,RECORD_TYPE,PROGRAM_NAME,FUNCTION_NAME,ERROR_MESSAGE," // + "EXCEPTION_TRACE,PARAM_VALUE,IP,CLIENT_NAME,SCREEN_SHOT,LOG_DATETIME) VALUES (" // + ":thisDbName,:thisRecordType,:thisProgName,:thisFuncName,:thisErrMsg," // + ":thisExcept,:thisPara,:thisIP,:thisClient,:thisScreen,SYSDATE)"; sql = "LITEON.USP_SAVE_PROGRAM_LOG"; OracleParameter[] ops = { new OracleParameter("v_type", OracleDbType.Varchar2, 0, pC.logType, ParameterDirection.Input), new OracleParameter("v_progName", OracleDbType.Varchar2, 0, pC.program, ParameterDirection.Input), new OracleParameter("v_funcName", OracleDbType.Varchar2, 0, pC.function, ParameterDirection.Input), new OracleParameter("v_errMsg", OracleDbType.Varchar2, 0, pC.error_message, ParameterDirection.Input), new OracleParameter("v_exMsg", OracleDbType.Varchar2, 0, pC.exception_trace, ParameterDirection.Input), new OracleParameter("v_param", OracleDbType.Varchar2, 0, pC.param_value, ParameterDirection.Input), new OracleParameter("v_IP", OracleDbType.Varchar2, 0, ip, ParameterDirection.Input), new OracleParameter("v_client", OracleDbType.Varchar2, 0, clientName, ParameterDirection.Input), new OracleParameter("v_img", OracleDbType.Blob, 0, b, ParameterDirection.Input), new OracleParameter("v_startTime", OracleDbType.Varchar2, 0, pC.startTime, ParameterDirection.Input) }; oracle.ExecProcNonQuery(sql, ops); //oracle.ExecSQLNonQuery2(sql, ops); } else if (pC.dbType == DbType.SqlServer) { SQLServer sqlserver = GetSqlServerDbInstance(); //sql = "INSERT INTO DNS_PROGRAM_EXEC_LOG(DB_NAME,RECORD_TYPE,PROGRAM_NAME,FUNCTION_NAME,ERROR_MESSAGE," // + "EXCEPTION_TRACE,PARAM_VALUE,IP,CLIENT_NAME,SCREEN_SHOT,LOG_DATETIME) VALUES (" // + "@dbName,@recordType,@program,@funcName,@errmsg," // + "@except,@params,@ip,@client,@SnapShot,GETDATE())"; sql = "EXEC USP_SAVE_PROGRAM_LOG @type,@progName,@funcName,@errMsg,@exMsg,@param,@IP,@client,@img,@startTime"; SqlParameter[] paras = new SqlParameter[10]; paras[0] = new SqlParameter("@type", SqlDbType.VarChar, 1); paras[0].Value = pC.logType; paras[1] = new SqlParameter("@progName", SqlDbType.NVarChar, 50); paras[1].Value = pC.program; paras[2] = new SqlParameter("@funcName", SqlDbType.NVarChar, 50); paras[2].Value = pC.function; paras[3] = new SqlParameter("@errMsg", SqlDbType.NVarChar, 2000); paras[3].Value = pC.error_message; paras[4] = new SqlParameter("@exMsg", SqlDbType.NVarChar, 2000); paras[4].Value = pC.exception_trace; paras[5] = new SqlParameter("@param", SqlDbType.NVarChar, 2000); paras[5].Value = pC.param_value; paras[6] = new SqlParameter("@IP", SqlDbType.NVarChar, 50); paras[6].Value = ip; paras[7] = new SqlParameter("@client", SqlDbType.NVarChar, 50); paras[7].Value = clientName; paras[8] = new SqlParameter("@img", SqlDbType.Image); paras[9] = new SqlParameter("@startTime", SqlDbType.VarChar, 20); paras[9].Value = pC.startTime; if (b == null) { paras[8].Value = DBNull.Value; } else { paras[8].Value = b; } sqlserver.ExecSQLNonQuery2(sql, paras); } else { } //return "OK"; } catch//(Exception ex) { //return ex.Message; } finally { GC.Collect(); } }