[20190329]探究sql語句相關mutexes補充2.txt

来源:https://www.cnblogs.com/lfree/archive/2019/03/29/10621449.html
-Advertisement-
Play Games

[20190329]探究sql語句相關mutexes補充2.txt--//昨天測試sql語句相關mutexes,看看如果出現多個子游標的情況.1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2.0.4. ...


[20190329]探究sql語句相關mutexes補充2.txt

--//昨天測試sql語句相關mutexes,看看如果出現多個子游標的情況.

1.環境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

$ cat m2.txt
set verify off
column a noprint new_value v_a;
select mod ( &&3 ,3) a  from dual ;
alter session set optimizer_index_caching= &v_a;
host sleep $(echo &&3/50| bc -l )
insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ;
commit ;
declare
v_id number;
v_d date;
begin
    for i in 1 .. &&1 loop
        --select  1 into v_id from dual ;
        --select  sysdate into v_d from dual ;
                select deptno into v_id from dept where deptno=10;
    end loop;
end ;
/
update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and method='&&2';
commit;
quit

--//這樣建立3個子游標.

2.測試:
$ seq 150 | xargs -I {}  -P 150 bash -c  "sqlplus -s -l scott/book @m2.txt 1e6 f2_150 {} >/dev/null"
$ seq 150 | xargs -I {}  -P 150 bash -c  "sqlplus -s -l scott/book @m2.txt 1e6 g2_150 {} >/dev/null"

SYS@book> @ mutexy 6
      HASH SUM_SLEEPS   SUM_GETS LOCATION                       MUTEX_TYPE           MUTEX_ADDR       SQLID         KGLNAOWN C100
---------- ---------- ---------- ------------------------------ -------------------- ---------------- ------------- -------- ---------------------------------------
1692266099   14495552 3.6572E+11 kksLockDelete [KKSCHLPIN6]     Cursor Pin           000000007BD3EC98 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099    7893620 2.0592E+11 kksfbc [KKSCHLFSP2]            Cursor Pin           000000007BD3EC98 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099    4307308 8.8088E+10 kksLockDelete [KKSCHLPIN6]     Cursor Pin           000000007BD3F260 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099    1997852 4.6240E+10 kksfbc [KKSCHLFSP2]            Cursor Pin           000000007BD3F260 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099    1345020 1.7428E+10 kksfbc [KKSCHLFSP2]            Cursor Pin           000000007C08D440 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099    1273888 1.9013E+10 kksLockDelete [KKSCHLPIN6]     Cursor Pin           000000007C08D440 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
6 rows selected.

SYS@book> @ fcha 000000007BD3EC98
LOC KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR
--- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ----------------
SGA 000000007BD3E5D0          1          1 KGLH0^64ddee73         4096 recr           4095 000000007CA31368

SYS@book> @ fcha 000000007BD3F260
LOC KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR
--- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ----------------
SGA 000000007BD3E5D0          1          1 KGLH0^64ddee73         4096 recr           4095 000000007CA31368

SYS@book> @ fcha 000000007C08D440
LOC KSMCHPTR           KSMCHIDX   KSMCHDUR KSMCHCOM           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR
--- ---------------- ---------- ---------- ---------------- ---------- -------- ---------- ----------------
SGA 000000007C08D168          1          1 KGLH0^64ddee73         4096 freeabl           0 000000007CA31368

--//3個子游標的KSMCHPAR=000000007CA31368.不過位置不一樣,1個在KSMCHCLS=recr.另外1個在KSMCHCLS=freeabl.

3.對比共用池的情況看看.
select a.* from x$ksmsp a where a.ksmchpar=hextoraw('000000007CA31368')
ADDR                   INDX    INST_ID   KSMCHIDX   KSMCHDUR KSMCHCOM         KSMCHPTR           KSMCHSIZ KSMCHCLS   KSMCHTYP KSMCHPAR
---------------- ---------- ---------- ---------- ---------- ---------------- ---------------- ---------- -------- ---------- ----------------
00007FDD4B32BE98      11124          1          1          1 KGLH0^64ddee73   000000007C08D168       4096 freeabl           0 000000007CA31368
00007FDD4B44A178      11921          1          1          1 KGLH0^64ddee73   000000007BD3E5D0       4096 recr           4095 000000007CA31368
--//可以發現如果子游標很多,會大量消耗父游標堆0的空間,也就是父游標堆0會變大.
--//參考鏈接:http://blog.itpub.net/267265/viewspace-2212504/

SYS@book> @ sharepool/shp4 a31kd5tkdvvmm 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游標句柄地址 000000007BD26060 000000007CD3E1C0 SELECT DEPTNO FROM DEPT WHERE DEPTNO=10           0          0          0 000000007BF848C0 000000007BD3ED40       4528       8088       6080     18696      18696 1692266099 a31kd5tkdvvmm          0
子游標句柄地址 000000007CE19EE0 000000007CD3E1C0 SELECT DEPTNO FROM DEPT WHERE DEPTNO=10           0          0          0 000000007C4BE340 000000007BD3F308       4528       8088       6080     18696      18696 1692266099 a31kd5tkdvvmm          1
子游標句柄地址 000000007CD3B6D0 000000007CD3E1C0 SELECT DEPTNO FROM DEPT WHERE DEPTNO=10           0          0          0 000000007CBF7AC8 000000007C08D4E8       4544       8088       6080     18712      18712 1692266099 a31kd5tkdvvmm          2
父游標句柄地址 000000007CD3E1C0 000000007CD3E1C0 SELECT DEPTNO FROM DEPT WHERE DEPTNO=10           0          0          0 000000007CA31368 00                     8792          0          0      8792       8792 1692266099 a31kd5tkdvvmm      65535

--//KGLOBHD0=000000007CA31368.
--//也就是metux的結構體在父游標的堆0中,為什麼放在父游標的堆0中,而不是各個子游標的堆0中.
--//集中管理嗎?不知道....

SCOTT@book> select method,count(*),round(avg(TIME_ELA),0),sum(TIME_ELA) from job_times  group by method order by to_number(substr(method,4)),3;
METHOD                 COUNT(*) ROUND(AVG(TIME_ELA),0) SUM(TIME_ELA)
-------------------- ---------- ---------------------- -------------
g2_150                      150                  19804       2970658
f2_150                      150                  19871       2980723
d2_150                      150                  20575       3086315
--//這樣因為參數不同,爭用相對減少,反而快一點點.

4.如果腳本修改如下:
$ cat m2.txt
set verify off
column a noprint new_value v_a;
--select mod ( &&3 ,3) a  from dual ;
alter session set optimizer_index_cost_adj= &&3;
host sleep $(echo &&3/50| bc -l )
insert into job_times values ( sys_context ('userenv', 'sid') ,dbms_utility.get_time ,'&&2') ;
commit ;
declare
v_id number;
v_d date;
begin
    for i in 1 .. &&1 loop
        --select  1 into v_id from dual ;
        --select  sysdate into v_d from dual ;
                select deptno into v_id from dept where deptno=10;
    end loop;
end ;
/
update job_times set time_ela = dbms_utility.get_time - time_ela where sid=sys_context ('userenv', 'sid') and method='&&2';
commit;
quit

--//這樣產生150個子游標.看看情況如何?重啟資料庫測試看看.

$ seq 150 | xargs -I {}  -P 150 bash -c  "sqlplus -s -l scott/book @m2.txt 1e6 h2_150 {} >/dev/null"

--//看到等待事件主要有:
cursor: mutex X
cursor: pin S
latch: shared pool
library cache lock
library cache: mutex X
--//主要是library cache lock

SYS@book> @ mutexy 20 a31kd5tkdvvmm
old  14:          and kglobt03= decode('&&2','',kglobt03,lower('&&2'))
new  14:          and kglobt03= decode('a31kd5tkdvvmm','',kglobt03,lower('a31kd5tkdvvmm'))
old  22: ORDER BY sum_sleeps DESC ) where rownum<= &1
new  22: ORDER BY sum_sleeps DESC ) where rownum<= 20
      HASH SUM_SLEEPS   SUM_GETS LOCATION                       MUTEX_TYPE           MUTEX_ADDR       SQLID         KGLNAOWN C100
---------- ---------- ---------- ------------------------------ -------------------- ---------------- ------------- -------- ---------------------------------------
1692266099      86674      76708 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D93F0C8 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099      44998       1963 kkslce [KKSCHLPIN2]            Cursor Pin           000000007DCC25D0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099      21442       3322 kkslce [KKSCHLPIN2]            Cursor Pin           000000007DD04320 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099      21291      10570 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D87DCA0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099      10268      21744 kkslce [KKSCHLPIN2]            Cursor Pin           000000007DD039A0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099      10268   18062620 kkscsPruneChild [KKSPRTLOC35]  Cursor Parent        000000007D176240 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       6493     837144 kkslce [KKSCHLPIN2]            Cursor Pin           000000007C506250 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       4228      21744 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D20C438 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       4077      15704 kkslce [KKSCHLPIN2]            Cursor Pin           000000007C11AD58 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       4077        453 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D20CE38 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3775     259720 kkslce [KKSCHLPIN2]            Cursor Pin           000000007CB89DE0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3322     388674 kkslce [KKSCHLPIN2]            Cursor Pin           000000007CA2F9D0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3322        151 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D1D6A10 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3322      56625 kkslce [KKSCHLPIN2]            Cursor Pin           000000007DCC2A90 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3020      57078 kkslce [KKSCHLPIN2]            Cursor Pin           000000007E248738 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       3020      29143 kkslce [KKSCHLPIN2]            Cursor Pin           000000007C11A3D8 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       2567      10268 kkslce [KKSCHLPIN2]            Cursor Pin           000000007DCC2F50 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       2416       8154 kkslce [KKSCHLPIN2]            Cursor Pin           000000007D93F588 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       1963      92412 kkslce [KKSCHLPIN2]            Cursor Pin           000000007CE74E10 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
1692266099       1963     850885 kgllkdl1  85                   Library Cache        000000007D1701D0 a31kd5tkdvvmm          SELECT DEPTNO FROM DEPT WHERE DEPTNO=10
20 rows selected.

SCOTT@book> select method,count(*),round(avg(TIME_ELA),0),sum(TIME_ELA) from job_times  group by method order by to_number(substr(method,4)),3;
METHOD                 COUNT(*) ROUND(AVG(TIME_ELA),0) SUM(TIME_ELA)
-------------------- ---------- ---------------------- -------------
h2_150                      150                  17556       2633437
g2_150                      150                  19804       2970658
f2_150                      150                  19871       2980723
C2_150                      150                  20481       3072117
d2_150                      150                  20575       3086315
e2_150                      150                  20589       3088339
6 rows selected.
--//執行更快一些.

--//另外我看到僅僅是cursor: pin S,還有許多與mutex有關的等待事件.自己還不熟悉.
SYS@book> @ ev_name cursor
old   1: select * from v$event_name where lower(name) like lower('%&&1%')
new   1: select * from v$event_name where lower(name) like lower('%cursor%')
    EVENT#   EVENT_ID NAME                                     PARAMETER1           PARAMETER2           PARAMETER3           WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
---------- ---------- ---------------------------------------- -------------------- -------------------- -------------------- ------------- ----------- --------------------
       278  877525844 cursor: mutex X                          idn                  value                where                   3875070507           4 Concurrency
       279 1575214430 cursor: mutex S                          idn                  value                where                   3875070507           4 Concurrency
       280 3085815766 cursor: pin X                            idn                  value                where                   3875070507           4 Concurrency
       281  352301881 cursor: pin S                            idn                  value                where                   3875070507           4 Concurrency
       282 1729366244 cursor: pin S wait on X                  idn                  value                where                   3875070507           4 Concurrency

SYS@book> @ ev_name mutex
old   1: select * from v$event_name where lower(name) like lower('%&&1%')
new   1: select * from v$event_name where lower(name) like lower('%mutex%')
    EVENT#   EVENT_ID NAME                                     PARAMETER1           PARAMETER2           PARAMETER3           WAIT_CLASS_ID WAIT_CLASS# WAIT_CLASS
---------- ---------- ---------------------------------------- -------------------- -------------------- -------------------- ------------- ----------- --------------------
       272   39333034 SecureFile mutex                                                                                           3875070507           4 Concurrency
       278  877525844 cursor: mutex X                          idn                  value                where                   3875070507           4 Concurrency
       279 1575214430 cursor: mutex S                          idn                  value                where                   3875070507           4 Concurrency
       289 1646780882 library cache: mutex X                   idn                  value                where                   3875070507           4 Concurrency
       290 2446268751 library cache: mutex S                   idn                  value                where                   3875070507           4 Concurrency

5.附上相關腳本:
$ cat sharepool/shp4.sql
column N0_6_16 format 99999999
SELECT DECODE (kglhdadr,
               kglhdpar, '父游標句柄地址',
               '子游標句柄地址')
          text,
       kglhdadr,
       kglhdpar,
       substr(kglnaobj,1,40) c40,
           KGLHDLMD,
           KGLHDPMD,
           kglhdivc,
       kglobhd0,
       kglobhd6,
       kglobhs0,kglobhs6,kglobt16,
       kglobhs0+kglobhs6+kglobt16 N0_6_16,
           kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16 N20,
           kglnahsh,
           kglobt03 ,
           kglobt09
  FROM x$kglob
 WHERE kglobt03 = '&1'  or kglhdpar='&1' or kglhdadr='&1' or KGLNAHSH= &2;


$ cat tpt/fcha.sql
--------------------------------------------------------------------------------
--
-- File name:   fcha.sql (Find CHunk Address) v0.2
-- Purpose:     Find in which heap (UGA, PGA or Shared Pool) a memory address resides
--
-- Author:      Tanel Poder
-- Copyright:   (c) http://blog.tanelpoder.com | @tanelpoder
--
-- Usage:       @fcha <addr_hex>
--              @fcha F6A14448
--
-- Other:       This would only report an UGA/PGA chunk address if it belongs
--              to *your* process/session (x$ksmup and x$ksmpp do not see other
--              session/process memory)
--
--------------------------------------------------------------------------------
prompt Find in which heap (UGA, PGA or Shared Pool) the memory address &1 resides...
prompt
prompt WARNING!!! This script will query X$KSMSP, which will cause heavy shared pool latch contention
prompt in systems under load and with large shared pool. This may even completely hang
prompt your instance until the query has finished! You probably do not want to run this in production!
prompt
pause  Press ENTER to continue, CTRL+C to cancel...


select
    'SGA' LOC,
    KSMCHPTR,
    KSMCHIDX,
    KSMCHDUR,
    KSMCHCOM,
    KSMCHSIZ,
    KSMCHCLS,
    KSMCHTYP,
    KSMCHPAR
from
    x$ksmsp
where
    to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX')
    between
        to_number(ksmchptr,'XXXXXXXXXXXXXXXX')
    and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1
union all
select
    'UGA',
    KSMCHPTR,
    null,
    null,
    KSMCHCOM,
    KSMCHSIZ,
    KSMCHCLS,
    KSMCHTYP,
    KSMCHPAR
from
    x$ksmup
where
    to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX')
    between
        to_number(ksmchptr,'XXXXXXXXXXXXXXXX')
    and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1
union all
select
    'PGA',
    KSMCHPTR,
    null,
    null,
    KSMCHCOM,
    KSMCHSIZ,
    KSMCHCLS,
    KSMCHTYP,
    KSMCHPAR
from
    x$ksmpp
where
    to_number(substr('&1', instr(lower('&1'), 'x')+1) ,'XXXXXXXXXXXXXXXX')
    between
        to_number(ksmchptr,'XXXXXXXXXXXXXXXX')
    and to_number(ksmchptr,'XXXXXXXXXXXXXXXX') + ksmchsiz - 1
/

$ cat mutexy.sql
column kglnaown format a20
column MUTEX_TYPE format a20
column kglnaobj format a100
column LOCATION format a30
  select * from (
  SELECT kglnahsh hash
        ,SUM (sleeps) sum_sleeps
        ,SUM (gets) sum_gets
        ,location
        ,mutex_type
                ,MUTEX_ADDR
        ,kglobt03 sqlid
        ,kglnaown
        ,replace(kglnaobj,chr(13)) c100
    --,SUBSTR (kglnaobj, 1, 140) object
    FROM x$kglob, x$mutex_sleep_history
   WHERE kglnahsh = mutex_identifier
         and kglobt03= decode('&&2','',kglobt03,lower('&&2'))
GROUP BY kglnaobj
        ,kglobt03
        ,kglnaown
        ,kglnahsh
        ,location
        ,mutex_type
                ,MUTEX_ADDR
ORDER BY sum_sleeps DESC ) where rownum<= &1;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ICMP ICMP(Internet Control Message protocol)互聯網信息控制協議,用於實現鏈路連通性測試和鏈路追蹤,可以實現鏈路差錯報告,屬於UDP協議。ICMP有多種類型的報文,同一類型的報文會有多個不同的Code。 ping、tracert 等命令的內部就是用的 icm ...
  • 目前是剛剛初學完zookeeper,這篇文章主要是簡單的對一些基本的概念進行梳理強化。 zookeeper基礎概念的理解 有時候電腦領域很多名詞都是從一長串英文提取首字母縮寫而來,但很不幸zookeeper不是。那麼,zookeeper到底是用來乾什麼的?我這裡先擺一段官網的介紹: ZooKeep ...
  • 項目結構 ActiveMQRecive下Program.cs 1 using Apache.NMS; 2 using Apache.NMS.ActiveMQ; 3 using Apache.NMS.Util; 4 using System; 5 using System.Collections.Ge ...
  • Spark初步 從wordcount開始 spark中自帶的example,有一個wordcount例子,我們逐步分析wordcount代碼,開始我們的spark之旅。 準備工作 把README.md文件複製到當前的文件目錄,啟動jupyter,編寫我們的代碼。 README.md文件在Spark的 ...
  • DCL: 管理用戶: 添加用戶: CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼' 刪除用戶: DROP USER '用戶名'@'主機名' 修改用戶密碼: UPDATE USER SET PASSWORD = PASSWORD ('新密碼')WHERE USER ...
  • 架構驅動的因素 運營商和互聯網面臨不同的歷史時期,因而大數據在各自領域承擔的使命是不一樣的 運營商面臨被管道化的挑戰,營收下滑,大數據項目承擔企業戰略轉型、數據變現的使命。同時由於成本的壓力,以及大量基礎設施和設備利舊的訴求,所以運營商在大數據項目中,對性能、成本和集成度提出了很高的要求。 互聯網企 ...
  • 有些業務場景下會有擇出周末的需求,具體判斷語句如下: 1、SELECT TO_CHAR(TO_DATE(DATA_DATE,'YYYY-MM-DD),'D') FROM DUAL; 如果DATA_DATE為星期六則結果為7,如果DATA_DATE為星期日則結果為1,所以TO_CHAR(TO_DATE ...
  • 背景 今天早上11點的時候有客戶打電話過來說醫院的cis系統一直有阻塞,導致系統有卡慢的現象,信息中心的電話都快被打爆了,信息科人員很頭疼啊。 萬幸我們給資料庫裝了‘攝像頭’會把資料庫的一切狀態操作都會記錄下來,趕緊要了遠程之後看到了系統確實存在大量的阻塞(下圖) 通過點擊紫色圓點之後發現了長長的阻 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...