Esempio n. 1
0
 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);
         }
     }
 }
Esempio n. 2
0
        public static string GetTextNode(this HtmlNode node)
        {
            var para = new ParaClass();

            node.GetTextRootProbability(para);

            return(XPath.SubXPath(para.Path, -2));
        }
Esempio n. 3
0
 /// <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);
 }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
    public void InvokeClassParaCB()
    {
        ParaClass paraCls = new ParaClass();

        for (int i = 0; i < 1000000; i++)
        {
            ClassParaEvent(paraCls);
        }
    }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
 private static ParaClass ChangeByRef(ref ParaClass p)
 {
     p = new ParaClass();
     return(p);
 }
Esempio n. 10
0
        //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);
        }
Esempio n. 11
0
 public static void sFuncClassParam(ParaClass x)
 {
 }
Esempio n. 12
0
 public void funcClassParam(ParaClass x)
 {
 }
Esempio n. 13
0
    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();
            }
        });
    }
Esempio n. 14
0
 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);
         }
     }
 }
Esempio n. 15
0
        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();
            }
        }