Percona Toolkit 神器全攻略(配置類)

来源:https://www.cnblogs.com/greatsql/p/18268244
-Advertisement-
Play Games

Percona Toolkit 神器全攻略(配置類) Percona Toolkit 神器全攻略系列共八篇,前文回顧: 前文回顧 Percona Toolkit 神器全攻略 Percona Toolkit 神器全攻略(實用類) 全文約定:$為命令提示符、greatsql>為GreatSQL資料庫提示 ...


Percona Toolkit 神器全攻略(配置類)

Percona Toolkit 神器全攻略系列共八篇,前文回顧:

前文回顧
Percona Toolkit 神器全攻略
Percona Toolkit 神器全攻略(實用類)

全文約定:$為命令提示符、greatsql>為GreatSQL資料庫提示符。在後續閱讀中,依據此約定進行理解與操作

配置類

在Percona Toolkit中配置類共有以下工具

  • pt-config-diff:比較資料庫配置文件和參數
  • pt-mysql-summary:對GreatSQL/MySQL配置和status進行彙總
  • pt-variable-advisor:分析參數,並提出建議

pt-config-diff

概要

比較 GreatSQL/MySQL 配置文件和伺服器變數

用法

  • pt-config-diff [OPTIONS] CONFIG CONFIG [CONFIG...]

選項

該工具所有選項如下

參數 含義
--ask-pass 連接 GreatSQL/MySQL 時提示輸入密碼
--charset 字元集
--config 讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--database 連接到該資料庫
--defaults-file 只從給定文件中讀取 GreatSQL/MySQL 選項
--help 顯示幫助
--host 連接到主機
--[no]ignore-case 比較變數時不區分大小寫
--ignore-variables 忽略、不比較這些變數
--password 用於連接的密碼
--pid 創建給定的 PID 文件
--port 用於連接的埠號
--[no]report 將 GreatSQL/MySQL 配置差異報告列印到 STDOUT
--report-width 將報告行截斷為設定的字元
--set-vars 在這個以逗號分隔的 variable=value 對列表中設置 GreatSQL/MySQL 變數
--socket 用於連接的套接字文件
--user 登錄的用戶
--version 顯示版本
--[no]version-check 版本檢查

最佳實踐

首先創建兩個配置文件(這裡為了示範方便配置文件內容較少)

# 以下創建test_my_1.cnf配置文件
$ vim test_my_1.cnf
[client]
socket    = /data/GreatSQL/mysql.sock
[mysql]
loose-skip-binary-as-hex
no-auto-rehash
[mysqld]
user    = mysql
port    = 3306
server_id = 3306
innodb_buffer_pool_size = 16G
loose-group_replication_group_seeds = '172.16.16.10:33061,172.16.16.12:33061,172.16.16.12:33061'
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"

# 以下創建test_my_2.cnf配置文件
$ vim test_my_2.cnf
[client]
socket    = /data/greatsql/greatsql.sock
[mysql]
loose-skip-binary-as-hex
no-auto-rehash
[mysqld]
user    = greatsql
port    = 3308
server_id = 3308
innodb_buffer_pool_size = 8G
loose-group_replication_group_seeds = '172.16.10:33081,172.16.10:33081,172.16.10:33081'
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaab1"

因為在配置MGR的時候,需要集群中的my.cnf部分配置一致,所以這個配置文件對比還是很有用處的

配置文件對比

不一致才會輸出,如果完全一致不會輸出

$ pt-config-diff /data/test_my_1.cnf /data/test_my_2.cnf

6 config differences
Variable                  /data/test_my_1.cnf       /data/test_my_2.cnf
========================= ========================= =========================
innodb_buffer_pool_size   17179869184               8589934592
loose_group_replicatio... aaaaaaaa-aaaa-aaaa-aaa... aaaaaaaa-aaaa-aaaa-aaa...
loose_group_replicatio... 172.16.16.10:33061,172... 172.16.10:33081,172.16...
port                      3306                      3308
server_id                 3306                      3308
user                      mysql                     greatsql

但是上面的輸出不夠完整,有的輸出被省略,此時可以加上--report-width 200,便可完整輸出

$ pt-config-diff /data/test_my_1.cnf /data/test_my_2.cnf --report-width 200

6 config differences
Variable                   /data/test_my_1.cnf                                      /data/test_my_2.cnf
========================== ======================================================== ===============================================
innodb_buffer_pool_size    17179869184                                              8589934592
loose_group_replication... aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1                     aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaab1
loose_group_replication... 172.16.16.10:33061,172.16.16.12:33061,172.16.16.12:33061 172.16.10:33081,172.16.10:33081,172.16.10:33081
port                       3306                                                     3308
server_id                  3306                                                     3308
user                       mysql                                                    greatsql

配置文件和系統變數對比

配置文件與本機GreatSQL系統變數對比,如果完全一致,則不輸出

$ pt-config-diff --report-width=200 /etc/my.cnf u=root,p=

1 config difference
Variable                  /etc/my.cnf myarch
========================= =========== ================================
slow_query_log_file       slow.log    /data/GreatSQL/myarch.log.000001

系統變數之間的對比

兩台不同的資料庫實例之間的系統變數對比

$ pt-config-diff --report-width=200 h=192.168.6.55,P=3306,u=GreatSQL,p=  h=192.168.6.129,P=3306,u=test,p='test'

104 config differences
Variable                   myarch                                                               hy
========================== ==================================================================== ====================================================================
admin_tls_version          TLSv1.2,TLSv1.3                                                      TLSv1.2
back_log                   1024                                                                 151
basedir                    /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/                /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.17-x86_64/
binlog_cache_size          4194304                                                              32768
binlog_expire_logs_seconds 604800                                                               2592000
binlog_rows_query_log_e... ON                                                                   OFF
......下方省略

pt-mysql-summary

概要

列印出來GreatSQL/MySQL的描述信息,包括:版本信息,數據目錄,命令的統計,用戶,資料庫以及複製等信息還包括各個變數(status、variables)信息和各個變數的比例信息,還有配置文件等信息。

用法

  • pt-mysql-summary [OPTIONS]

選項

該工具所有選項如下

參數 含義
--all-databases mysqldump 並彙總所有資料庫
--ask-pass 連接 GreatSQL/MySQL 時提示輸入密碼
--config 讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--databases mysqldump 並總結這個以逗號分隔的資料庫列表。如果要轉儲和彙總所有資料庫,請指定 --all-databases
--defaults-file 只從給定文件中讀取 GreatSQL/MySQL 選項
--help 顯示幫助
--host 要連接的主機
--list-encrypted-tables 包括所有資料庫中加密表的列表。這可能會導致速度變慢,因為查詢信息模式表可能會很慢。
--password 連接時使用的密碼
--port 用於連接的埠號
--read-samples 從此目錄中找到的文件創建報告
--save-samples 將用於生成摘要的數據文件保存在此目錄中
--sleep 收集狀態計數器時休眠的秒數
--socket 用於連接的套接字文件
--user 登錄的用戶
--version 顯示版本

最佳實踐

$ pt-mysql-summary --user=root --password=greatsql --host=localhost --port=3306

此時會輸出所有關於GreatSQL的信息,但是要註意很多輸出都是做了四捨五入,並不是精確的數據

不建議此工具遠程連接其它資料庫,因為可能導致輸出數據混亂

接下來將此工具輸出結果分成各個模塊介紹

# Percona Toolkit MySQL Summary Report #######################
              System time | 2024-03-14 08:19:45 UTC (local TZ: CST +0800)
# Instances ##################################################
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
# MySQL Executable ###########################################
       Path to executable | /usr/local/GreatSQL-8.0.32-25-Linux-glibc2.28-x86_64/bin/mysqld
              Has symbols | Yes
# Slave Hosts ################################################
No slaves found

這四個部分顯示報告是在哪台伺服器上生成的以及該伺服器上正在運行哪些 GreatSQL 實例,這是從 ps 的輸出中檢測到的,並不總是檢測所有實例和參數。

# Report On Port 3306 ########################################
                     User | root@localhost
                     Time | 2024-03-14 16:19:45 (+08:00)
                 Hostname | myarch
                  Version | 8.0.32-25 GreatSQL, Release 25, Revision 79f57097e3f
                 Built On | Linux x86_64
                  Started | 2024-03-08 09:50 (up 6+06:29:24)
                Databases | 9
                  Datadir | /data/GreatSQL/
                Processes | 2 connected, 2 running
              Replication | Is not a slave, has 0 slaves connected
                  Pidfile | mysql.pid (does not exist)

本節是 GreatSQL 實例的快速摘要:版本、正常運行時間和其他非常基本的參數。時間輸出是從 GreatSQL 伺服器生成的,可能與之前列印的系統日期和時間不同,如果不同的話可以檢查下資料庫和操作系統的時間是否匹配

# Processlist ################################################

  Command                        COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  Daemon                                1       1    500000    500000
  Query                                 1       1         0         0
  Sleep                                 1       0       450       450
......中間省略
  State                          COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
                                        1       0         0         0
  init                                  1       1         0         0
  Waiting on empty queue                1       1    500000    500000

本節是 SHOW PROCESSLIST 輸出的摘要,這裡的數字會四捨五入,不是最精確的

# Status Counters (Wait 10 Seconds) ##########################
Variable                                Per day  Per second     10 secs
Aborted_clients                              10                        
Aborted_connects                              2                        
Binlog_snapshot_position                    100                        
.......中間省略
Table_open_cache_overflows                   30                        
Threadpool_idle_threads                       2                        
Threadpool_threads                            2                        
Threads_created                              25                        
Uptime                                    90000           1           1

此部分顯示從 SHOW GLOBAL STATUS 的兩個快照中選擇的計數器,這些快照間隔大約 10 秒收集併進行模糊舍入。

  • 第一列是變數名稱。

  • 第二列是第一個快照的計數器除以 86400(一天的秒數),因此您可以看到計數器每天的變化幅度。 86400 次模糊輪換到 90000,因此正常運行時間計數器應始終約為 90000。

  • 第三列是第一個快照的值,除以正常運行時間,然後進行模糊舍入,因此它大致表示計數器在伺服器正常運行時間內每秒增長的速度。

  • 第四列是第一個和第二個快照的增量差異,除以正常運行時間的差異,然後進行模糊舍入。因此,它顯示了生成報告時計數器每秒增長的速度。

# Table cache ################################################
                     Size | 1024
                    Usage | 70%

此部分顯示表緩存的大小,後面是表緩存的使用百分比。

# Key Percona Server features ################################
      Table & Index Stats | Disabled
     Multiple I/O Threads | Enabled
     Corruption Resilient | Enabled
      Durable Replication | Not Supported
     Import InnoDB Tables | Not Supported
     Fast Server Restarts | Not Supported
         Enhanced Logging | Disabled
     Replica Perf Logging | Enabled
      Response Time Hist. | Not Supported
          Smooth Flushing | Not Supported
      HandlerSocket NoSQL | Not Supported
           Fast Hash UDFs | Unknown

本節顯示 Percona Server 中可用的特性和啟用情況。

# Plugins ####################################################
       InnoDB compression | ACTIVE

本節顯示特定插件以及它們是否已啟用

該工具只檢測少數幾個Plugin,並不是所有的插件都檢測

# Schema #####################################################
Specify --databases or --all-databases to dump and summarize schemas
# 如果沒指定--databases or --all-databases 則不會列印

# Schema #####################################################
  Database  Tables Views SPs Trigs Funcs   FKs Partn
  mysql         38                                  
  aptest         7                                  
  db2            1                                  
  sys_audit      1                                  
  test_db       11                                  
  tpch           8                                  

  Database  InnoDB CSV
  aptest         7    
  db2            1    
  mysql          2   2
  sys_audit      1    
  test_db       11    
  tpch           8    

  Database  BTREE
  aptest        7
  db2           1
  mysql        45
  sys_audit     1
  test_db      19
  tpch         17
  
# 下方部分輸出為了緊湊顯示,作者將這些列標題設置為垂直輸出
# 需要您從頂部向下閱讀,第一列是 char ,第二列是 timestamp
              c   t   s   i   t   e   v   f   t   b   s   j   b   m   m   t   d   d   d   d
              h   i   e   n   e   n   a   l   i   i   m   s   l   e   e   i   a   o   a   e
              a   m   t   t   x   u   r   o   n   g   a   o   o   d   d   m   t   u   t   c
              r   e           t   m   c   a   y   i   l   n   b   i   i   e   e   b   e   i
                  s                   h   t   i   n   l           u   u       t   l       m
                  t                   a       n   t   i           m   m       i   e       a
                  a                   r       t       n           t   b       m           l
                  m                                   t           e   l       e            
                  p                                               x   o                    
                                                                  t   b                    
  Database  === === === === === === === === === === === === === === === === === === === ===
  aptest     23           1          58          19                           9   3   2    
  db2                     1                       1                                        
  mysql      64  10   4  46  31  61  25   5  15  23   6   2   4   2   2   2                
  sys_audit                          11                           1                        
  test_db     3   2      33   2      29       4   3   1                       7   2       5
  tpch       16          19          13                                               4   9

如果您指定 --databases--all-databases ,該工具將列印以上部分

本節顯示了資料庫中對象的數量和類型,它是通過運行 mysqldump --no-data 生成的,而不是通過查詢INFORMATION_SCHEMA生成

本節中的第一個子報告是每個資料庫中按類型劃分的對象計數:表、視圖等。第二個顯示每個資料庫中有多少表使用不同的存儲引擎。第三個子報告顯示每個資料庫中每種類型索引的數量。

最後一部分顯示每個資料庫中各種數據類型的列數。為了緊湊顯示,列標題的格式是垂直的,因此您需要從頂部向下閱讀。在此示例中,第一列是 char ,第二列是 timestamp

這部分輸出的數字都是精確的,不是四捨五入的

# Noteworthy Technologies ####################################
                      SSL | No
     Explicit LOCK TABLES | No
           Delayed Insert | No
          XA Transactions | No
              NDB Cluster | No
      Prepared Statements | No
 Prepared statement count | 0

此部分顯示該伺服器上使用的一些特定技術。

# InnoDB #####################################################
                  Version | 8.0.32-8.0.32
         Buffer Pool Size | 2.0G
         Buffer Pool Fill | 70%
        Buffer Pool Dirty | 0%
......中間省略
      Pending I/O Flushes | 7 buf pool, 0 log
       Transaction States | 3xnot started

此部分顯示InnoDB 存儲引擎的重要配置變數。緩衝池填充百分比和臟百分比是模糊舍入的。最後幾行來自 SHOW INNODB STATUS 的輸出。

# MyISAM #####################################################
                Key Cache | 32.0M
                 Pct Used | 20%
                Unflushed | 0%

此部分顯示 MyISAM 鍵緩存的大小,後面是正在使用的緩存百分比和未刷新百分比(四捨五入)

# Security ###################################################
                    Users | 2 users, 0 anon, 0 w/o pw, 2 old pw
            Old Passwords | 

此部分顯示根據對 GreatSQL 系統資料庫中的表的查詢生成的。它顯示了存在多少用戶,以及各種潛在的安全風險,例如舊式密碼和無密碼的用戶。

# Binary Logging #############################################
                  Binlogs | 8
               Zero-Sized | 0
               Total Size | 10.6G
            binlog_format | ROW
         expire_logs_days | 0
              sync_binlog | 1
                server_id | 3306
             binlog_do_db | 
         binlog_ignore_db | 

此部分顯示二進位日誌的配置和狀態。如果存在大小為0的二進位日誌,則可能是二進位日誌索引與磁碟上實際存在的二進位日誌不同步。

# Noteworthy Variables #######################################
     Auto-Inc Incr/Offset | 1/1
   default_storage_engine | InnoDB
               flush_time | 0
             init_connect | 
                init_file | 
                 sql_mode | 
                ......中間省略
log_queries_not_using_indexes | ON
        log_slave_updates | ON

此部分顯示幾個值得註意的伺服器配置變數,在使用該伺服器時瞭解這些變數可能很重要。

# Configuration File #########################################
              Config File | /etc/my.cnf

最後部分顯示 my.cnf 文件的精美列印版本,其中刪除了註釋並添加了空格以對齊內容以便於閱讀。

pt-variable-advisor

概要

這是一款分析參數,並且給出參數設置建議的工具

用法

  • pt-variable-advisor [OPTIONS] [DSN]

選項

該工具所有選項如下

參數 含義
--ask-pass 連接 GreatSQL/MySQL 時提示輸入密碼
--charset 字元集
--config 讀取這個逗號分隔的配置文件列表,如果指定,這必須是命令行上的第一個選項
--daemonize 後臺運行
--database 連接到該資料庫
--defaults-file 只從給定文件中讀取 GreatSQL/MySQL 選項
--help 顯示幫助
--host 要連接的主機
--ignore-rules 忽略這些規則 ID
--password 連接時使用的密碼
--pid 創建給定的 PID 文件
--port 連接時使用的埠號
--set-vars 在這個以逗號分隔的 variable=value 對列表中設置 GreatSQL/MySQL 變數
--socket 用於連接的套接字文件
--source-of-variables 從此源讀取 SHOW VARIABLES
--user 登錄的用戶
--verbose 增加輸出的詳細程度
--version 顯示版本
--[no]version-check 版本檢查

最佳實踐

分析本地GreatSQL資料庫參數的一些建議

$ pt-variable-advisor localhost

# WARN delay_key_write: MyISAM index blocks are never flushed until necessary.

# WARN innodb_log_buffer_size: The InnoDB log buffer size generally should not be set larger than 16MB.

# NOTE read_buffer_size-1: The read_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it.

# NOTE read_rnd_buffer_size-1: The read_rnd_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it.

# NOTE sort_buffer_size-1: The sort_buffer_size variable should generally be left at its default unless an expert determines it is necessary to change it.

# WARN expire_logs_days: Binary logs are enabled, but automatic purging is not enabled.

# NOTE innodb_data_file_path: Auto-extending InnoDB files can consume a lot of disk space that is very difficult to reclaim later.

# WARN myisam_recover_options: myisam_recover_options should be set to some value such as BACKUP,FORCE to ensure that table corruption is noticed.

當然也可以把SHOW VARIABLES輸出的結果保存在pt_va.txt文件中,然後再用工具分析

$ pt-variable-advisor localhost --source-of-variables pt_va.txt

個人覺得除了非常明顯的錯誤,否則這個建議沒有太多的意義。

這裡也推薦一個網頁版的GreatSQL/MySQL狀態診斷工具,由葉老師出品➡https://imysql.com/my-state-diag.html

本文完

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

-Advertisement-
Play Games
更多相關文章
  • 《誰說菜鳥不會數據分析(SPSS篇)》繼續採用職場三人行的方式來構建內容,細緻梳理了準專業數據分析的常見問題,並且挑選出企業實踐中最容易碰到的案例,以最輕鬆直白的方式來講好數據分析的故事。 ...
  • 在當下的企業管理中,由於數據量的激增,管理方式逐漸從基於經驗轉向基於數據。在此過程中,我們能夠通過數據探查業務情況、分析數據,從而獲取更優的決策支持數據。這通常通過數據報表或分析平臺來實現,對於臨時性場景,則會基於日常取數方式進行臨時數據分析。 但在此過程中,由於數據源的多樣性、數據結果呈現的多樣性 ...
  • 官方文檔地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler簡介 摘自官網:Apache DolphinScheduler 是一個分散式易擴展的可視化DAG工作流任務調度開源系統。適用於企業級場景,提供了一個 ...
  • 本系列文章是 DolphinScheduler 由淺入深的教程,涵蓋搭建、二開迭代、核心原理解讀、運維和管理等一系列內容。適用於想對 DolphinScheduler瞭解或想要加深理解的讀者。 祝開卷有益。 本系列教程基於 DolphinScheduler 2.0.5 做的優化。(穩定版推薦使 ...
  • 6月19-20日,由中國通信標準化協會主辦,中國通信標準化協會大數據技術標準推進委員會(CCSA TC601)承辦的首屆“數據智能大會”隆重召開。會議期間,天翼雲科技有限公司攜手中國信息通信研究院雲計算與大數據研究所共同發佈《大數據平臺雲化改造實踐指南(2024年)》 ...
  • 在當今數據驅動的時代,企業對數據的實施性能力提出了前所未有的高要求。為了應對這一挑戰,構建高效、靈活且可擴展的實時湖倉成為數字化轉型的關鍵。本文將深入探討袋鼠雲數棧如何通過三大核心實踐——ChunJun 融合 Flink CDC、MySQL 一鍵入湖至 Paimon 的實踐,以及湖倉一體治理 Pai ...
  • 分享是最有效的學習方式。 博客:https://blog.ktdaddy.com/ 故事 梅雨季,悶熱的夜,令人窒息,窗外一道道閃電劃破漆黑的夜幕,小貓塞著耳機聽著恐怖小說,輾轉反側,終於睡意來了,然而挨千刀的手機早不振晚不振,偏偏這個時候振動了一下,一個激靈,沒有按捺住對內容的好奇,點開了簡訊,卧 ...
  • 華為雲記憶體加速的“全自動主動緩存方案”,可通過界面可視化配置,支持用戶將MySQL表數據映射為GeminiDB中的Hash等結構,同時還支持數據過濾及過期等功能,配置完成後即可實現自動同步,不僅簡單易用還能提升效率。 ...
一周排行
    -Advertisement-
    Play Games
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式每次關閉時就會自動崩潰,一直找不到原因讓我幫忙看一下怎麼回事,這位朋友應該是第二次找我了,分析了下 dump 還是挺經典的,拿出來給大家分享一下吧。 二:WinDbg 分析 1. 為什麼會崩潰 找崩潰原因比較簡單,用 !analyze -v 命 ...
  • 在一些報表模塊中,需要我們根據用戶操作的名稱,來動態根據人員姓名,更新報表的簽名圖片,也就是電子手寫簽名效果,本篇隨筆介紹一下使用FastReport報表動態更新人員簽名圖片。 ...
  • 最新內容優先發佈於個人博客:小虎技術分享站,隨後逐步搬運到博客園。 創作不易,如果覺得有用請在Github上為博主點亮一顆小星星吧! 博主開始學習編程於11年前,年少時還只會使用cin 和cout ,給單片機點點燈。那時候,類似async/await 和future/promise 模型的認知還不是 ...
  • 之前在阿裡雲ECS 99元/年的活動實例上搭建了一個測試用的MINIO服務,以前都是直接當基礎設施來使用的,這次準備自己學一下S3相容API相關的對象存儲開發,因此有了這個小工具。目前僅包含上傳功能,後續計劃開發一個類似圖床的對象存儲應用。 ...
  • 目錄簡介快速入門安裝 NuGet 包實體類User資料庫類DbFactory增刪改查InsertSelectUpdateDelete總結 簡介 NPoco 是 PetaPoco 的一個分支,具有一些額外的功能,截至現在 github 星數 839。NPoco 中文資料沒多少,我是被博客園群友推薦的, ...
  • 前言 前面使用 Admin.Core 的代碼生成器生成了通用代碼生成器的基礎模塊 分組,模板,項目,項目模型,項目欄位的基礎功能,本篇繼續完善,實現最核心的模板生成功能,並提供生成預覽及代碼文件壓縮下載 準備 首先清楚幾個模塊的關係,如何使用,簡單畫一個流程圖 前面完成了基礎的模板組,模板管理,項目 ...
  • 假設需要實現一個圖標和文本結合的按鈕 ,普通做法是 直接重寫該按鈕的模板; 如果想作為通用的呢? 兩種做法: 附加屬性 自定義控制項 推薦使用附加屬性的形式 第一種:附加屬性 創建Button的附加屬性 ButtonExtensions 1 public static class ButtonExte ...
  • 在C#中,委托是一種引用類型的數據類型,允許我們封裝方法的引用。通過使用委托,我們可以將方法作為參數傳遞給其他方法,或者將多個方法組合在一起,從而實現更靈活的編程模式。委托類似於函數指針,但提供了類型安全和垃圾回收等現代語言特性。 基本概念 定義委托 定義委托需要指定它所代表的方法的原型,包括返回類 ...