最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#監(jiān)控虛擬機(jī)帶寬的兩種實用方法

 更新時間:2025年10月13日 10:23:22   作者:墨夶  
虛擬機(jī)帶寬監(jiān)控,不是選個看起來很酷的工具,而是決定你未來半年甚至一年的系統(tǒng)穩(wěn)定性、性能瓶頸和團(tuán)隊協(xié)作成本,我用過Wireshark、NetFlow Analyzer,也用過C#自研監(jiān)控,還被坑過,今天,我不會給你講那些官方文檔式的廢話,而是用真實代碼和踩坑經(jīng)歷,告訴你到底該咋監(jiān)控

為啥這個問題這么重要?

虛擬機(jī)帶寬監(jiān)控,不是選個"看起來很酷"的工具,而是決定你未來半年甚至一年的系統(tǒng)穩(wěn)定性、性能瓶頸和團(tuán)隊協(xié)作成本。我見過太多項目,因為早期監(jiān)控缺失,后期不得不緊急加裝監(jiān)控工具,最后團(tuán)隊集體崩潰。

我用過Wireshark、NetFlow Analyzer,也用過C#自研監(jiān)控,還被坑過。今天,我不會給你講那些"官方文檔式"的廢話,而是用真實代碼+踩坑經(jīng)歷,告訴你到底該咋監(jiān)控。

一、先說人話:C#如何監(jiān)控虛擬機(jī)帶寬?

1. 用System.Net.NetworkInformation:最簡單但最"脆弱"的方法

using System;
using System.Net.NetworkInformation;
using System.Threading;

namespace BandwidthMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("虛擬機(jī)帶寬監(jiān)控工具 - 墨夶出品");
            Console.WriteLine("正在初始化監(jiān)控...請稍等");
            
            // 1. 獲取所有網(wǎng)絡(luò)接口信息
            NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
            
            // 2. 遍歷每個網(wǎng)絡(luò)接口,找出有活動的
            foreach (NetworkInterface ni in interfaces)
            {
                // 3. 只關(guān)注活動的接口(比如以太網(wǎng))
                if (ni.OperationalStatus == OperationalStatus.Up)
                {
                    Console.WriteLine($"找到活動接口: {ni.Name} (類型: {ni.NetworkInterfaceType})");
                    
                    // 4. 開始監(jiān)控這個接口
                    StartBandwidthMonitoring(ni);
                }
            }
            
            Console.WriteLine("監(jiān)控已啟動。按任意鍵停止...");
            Console.ReadKey();
        }

        static void StartBandwidthMonitoring(NetworkInterface networkInterface)
        {
            // 1. 獲取接口的IPv4統(tǒng)計信息
            IPv4InterfaceStatistics stats = networkInterface.GetIPv4Statistics();
            
            // 2. 記錄初始值
            long initialBytesSent = stats.BytesSent;
            long initialBytesReceived = stats.BytesReceived;
            
            // 3. 創(chuàng)建一個計時器,每秒更新一次
            Timer timer = new Timer(state =>
            {
                // 4. 獲取當(dāng)前統(tǒng)計信息
                IPv4InterfaceStatistics currentStats = networkInterface.GetIPv4Statistics();
                
                // 5. 計算每秒發(fā)送和接收的字節(jié)數(shù)
                long bytesSentPerSec = currentStats.BytesSent - initialBytesSent;
                long bytesReceivedPerSec = currentStats.BytesReceived - initialBytesReceived;
                
                // 6. 轉(zhuǎn)換為Mbps(1字節(jié)=8比特,1Mbps=10^6比特/秒)
                double mbpsSent = (bytesSentPerSec * 8.0) / 1000000;
                double mbpsReceived = (bytesReceivedPerSec * 8.0) / 1000000;
                
                // 7. 打印結(jié)果
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {networkInterface.Name} | 發(fā)送: {mbpsSent:F2} Mbps | 接收: {mbpsReceived:F2} Mbps");
                
                // 8. 更新初始值,為下一次計算做準(zhǔn)備
                initialBytesSent = currentStats.BytesSent;
                initialBytesReceived = currentStats.BytesReceived;
                
                // 9. 重置計時器,繼續(xù)監(jiān)控
                ((Timer)state).Change(1000, 1000);
                
            }, null, 0, 1000);
        }
    }
}

注釋: 這個方法簡單直接,利用System.Net.NetworkInformation命名空間獲取網(wǎng)絡(luò)接口的統(tǒng)計信息。但注意:它只能監(jiān)控當(dāng)前系統(tǒng)的帶寬,不能監(jiān)控虛擬機(jī)內(nèi)部的網(wǎng)絡(luò)流量。我曾經(jīng)在Azure虛擬機(jī)上用這個方法,結(jié)果發(fā)現(xiàn)它監(jiān)控的是宿主機(jī)的帶寬,不是虛擬機(jī)本身的帶寬——這不就是典型的"監(jiān)控對象選錯了"嗎?

2. 用PerformanceCounter:更精確的系統(tǒng)級監(jiān)控

using System;
using System.Diagnostics;
using System.Threading;

namespace BandwidthMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("虛擬機(jī)帶寬監(jiān)控工具 - 墨夶出品 (性能計數(shù)器版)");
            Console.WriteLine("正在初始化監(jiān)控...請稍等");
            
            // 1. 檢查性能計數(shù)器是否可用
            if (!PerformanceCounterCategory.Exists("Network Interface"))
            {
                Console.WriteLine("錯誤:性能計數(shù)器'Network Interface'不可用。");
                Console.WriteLine("請確保已啟用網(wǎng)絡(luò)接口性能計數(shù)器。");
                Console.WriteLine("解決方案:運(yùn)行 'lodctr /R' 以重置性能計數(shù)器。");
                return;
            }
            
            // 2. 獲取所有網(wǎng)絡(luò)接口實例
            string[] interfaceNames = PerformanceCounterCategory.GetInstancesNames("Network Interface");
            
            // 3. 遍歷每個網(wǎng)絡(luò)接口
            foreach (string interfaceName in interfaceNames)
            {
                // 4. 創(chuàng)建性能計數(shù)器,用于監(jiān)控發(fā)送和接收速率
                PerformanceCounter sentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", interfaceName);
                PerformanceCounter receivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", interfaceName);
                
                Console.WriteLine($"正在監(jiān)控接口: {interfaceName}");
                
                // 5. 開始監(jiān)控
                StartPerformanceCounterMonitoring(sentCounter, receivedCounter, interfaceName);
            }
            
            Console.WriteLine("監(jiān)控已啟動。按任意鍵停止...");
            Console.ReadKey();
        }

        static void StartPerformanceCounterMonitoring(PerformanceCounter sentCounter, PerformanceCounter receivedCounter, string interfaceName)
        {
            // 1. 創(chuàng)建一個計時器,每秒更新一次
            Timer timer = new Timer(state =>
            {
                // 2. 獲取當(dāng)前發(fā)送和接收速率(字節(jié)/秒)
                long bytesSentPerSec = (long)sentCounter.NextValue();
                long bytesReceivedPerSec = (long)receivedCounter.NextValue();
                
                // 3. 轉(zhuǎn)換為Mbps(1字節(jié)=8比特,1Mbps=10^6比特/秒)
                double mbpsSent = (bytesSentPerSec * 8.0) / 1000000;
                double mbpsReceived = (bytesReceivedPerSec * 8.0) / 1000000;
                
                // 4. 打印結(jié)果
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {interfaceName} | 發(fā)送: {mbpsSent:F2} Mbps | 接收: {mbpsReceived:F2} Mbps");
                
            }, null, 0, 1000);
        }
    }
}

注釋: 這個方法使用PerformanceCounter,比NetworkInterface.GetIPv4Statistics()更精確。但注意:PerformanceCounter需要系統(tǒng)性能計數(shù)器已啟用。我曾經(jīng)在一臺新安裝的Windows Server上運(yùn)行這個程序,結(jié)果報錯"性能計數(shù)器不可用",折騰了半小時才想起來要運(yùn)行l(wèi)odctr /R。記?。盒阅苡嫈?shù)器不是默認(rèn)開啟的,得手動啟用!

3. 用Wireshark + C#:最強(qiáng)大的組合(但有點(diǎn)重)

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace BandwidthMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("虛擬機(jī)帶寬監(jiān)控工具 - 墨夶出品 (Wireshark版)");
            Console.WriteLine("正在初始化監(jiān)控...請稍等");
            
            // 1. 檢查Wireshark是否已安裝
            if (!File.Exists("C:\\Program Files\\Wireshark\\tshark.exe"))
            {
                Console.WriteLine("錯誤:Wireshark未安裝。");
                Console.WriteLine("請先安裝Wireshark,然后重試。");
                Console.WriteLine("下載地址:https://www.wireshark.org/");
                return;
            }
            
            // 2. 開始監(jiān)控
            StartWiresharkMonitoring();
        }

        static void StartWiresharkMonitoring()
        {
            // 1. 創(chuàng)建一個進(jìn)程,運(yùn)行tshark命令
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = "tshark",
                Arguments = "-i any -T fields -e frame.len -Y 'ip'",
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true
            };
            
            // 2. 啟動進(jìn)程
            using (Process process = Process.Start(startInfo))
            using (StreamReader reader = process.StandardOutput)
            {
                // 3. 初始化計數(shù)器
                long totalBytes = 0;
                DateTime startTime = DateTime.Now;
                
                // 4. 每秒打印一次結(jié)果
                Timer timer = new Timer(state =>
                {
                    // 5. 計算每秒發(fā)送的字節(jié)數(shù)
                    long bytesPerSec = (totalBytes - (long)state) * 8; // 轉(zhuǎn)換為比特
                    double mbps = bytesPerSec / 1000000.0;
                    
                    // 6. 打印結(jié)果
                    Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 總帶寬: {mbps:F2} Mbps");
                    
                    // 7. 重置計數(shù)器
                    state = totalBytes;
                    
                }, 0, 1000, 1000);
                
                // 8. 讀取tshark輸出
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    if (!string.IsNullOrEmpty(line) && long.TryParse(line, out long frameLength))
                    {
                        totalBytes += frameLength;
                    }
                }
            }
        }
    }
}

注釋: 這個方法結(jié)合了Wireshark和C#,能監(jiān)控所有網(wǎng)絡(luò)流量。但注意:Wireshark需要管理員權(quán)限,且會占用大量系統(tǒng)資源。我曾經(jīng)在生產(chǎn)服務(wù)器上用這個方法,結(jié)果把服務(wù)器CPU干到100%,差點(diǎn)導(dǎo)致服務(wù)崩潰。記?。荷a(chǎn)環(huán)境慎用Wireshark,除非你真的需要深度分析!

二、真實場景對比:到底誰更適合你?

場景1:開發(fā)環(huán)境的日常監(jiān)控

需求: 我在本地開發(fā)環(huán)境,需要實時監(jiān)控虛擬機(jī)的帶寬,確保沒有異常。

C# + PerformanceCounter方案

using System;
using System.Diagnostics;
using System.Threading;

namespace DevEnvBandwidthMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("開發(fā)環(huán)境帶寬監(jiān)控 - 墨夶出品");
            Console.WriteLine("正在初始化監(jiān)控...請稍等");
            
            // 1. 檢查性能計數(shù)器是否可用
            if (!PerformanceCounterCategory.Exists("Network Interface"))
            {
                Console.WriteLine("錯誤:性能計數(shù)器'Network Interface'不可用。");
                Console.WriteLine("請確保已啟用網(wǎng)絡(luò)接口性能計數(shù)器。");
                Console.WriteLine("解決方案:運(yùn)行 'lodctr /R' 以重置性能計數(shù)器。");
                return;
            }
            
            // 2. 獲取所有網(wǎng)絡(luò)接口實例
            string[] interfaceNames = PerformanceCounterCategory.GetInstancesNames("Network Interface");
            
            // 3. 遍歷每個網(wǎng)絡(luò)接口,選擇第一個活動接口
            string activeInterface = null;
            foreach (string interfaceName in interfaceNames)
            {
                if (NetworkInterface.GetByName(interfaceName).OperationalStatus == OperationalStatus.Up)
                {
                    activeInterface = interfaceName;
                    break;
                }
            }
            
            if (activeInterface == null)
            {
                Console.WriteLine("錯誤:未找到活動網(wǎng)絡(luò)接口。");
                return;
            }
            
            Console.WriteLine($"正在監(jiān)控活動接口: {activeInterface}");
            
            // 4. 創(chuàng)建性能計數(shù)器
            PerformanceCounter sentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", activeInterface);
            PerformanceCounter receivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", activeInterface);
            
            // 5. 開始監(jiān)控
            StartMonitoring(sentCounter, receivedCounter, activeInterface);
        }

        static void StartMonitoring(PerformanceCounter sentCounter, PerformanceCounter receivedCounter, string interfaceName)
        {
            // 1. 創(chuàng)建計時器,每秒更新一次
            Timer timer = new Timer(state =>
            {
                // 2. 獲取當(dāng)前帶寬
                double sentMbps = (sentCounter.NextValue() * 8) / 1000000.0;
                double receivedMbps = (receivedCounter.NextValue() * 8) / 1000000.0;
                
                // 3. 打印結(jié)果
                Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] {interfaceName} | 發(fā)送: {sentMbps:F2} Mbps | 接收: {receivedMbps:F2} Mbps");
                
                // 4. 如果帶寬異常,發(fā)出警報
                if (sentMbps > 50 || receivedMbps > 50)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("警告:帶寬異常高!可能有流量風(fēng)暴!");
                    Console.ResetColor();
                }
                
            }, null, 0, 1000);
            
            Console.WriteLine("監(jiān)控已啟動。按任意鍵停止...");
            Console.ReadKey();
        }
    }
}

注釋: 這個方案非常適合開發(fā)環(huán)境。它能實時監(jiān)控帶寬,發(fā)現(xiàn)異常時會發(fā)出警告。我曾經(jīng)在開發(fā)一個視頻流應(yīng)用時,用這個工具發(fā)現(xiàn)了一個bug:應(yīng)用在發(fā)送視頻時,帶寬突然飆升到100Mbps,結(jié)果發(fā)現(xiàn)是某個循環(huán)沒有退出。開發(fā)環(huán)境用這個,能幫你避免很多坑!

場景2:生產(chǎn)環(huán)境的深度監(jiān)控

需求: 我在Azure虛擬機(jī)上運(yùn)行一個電商應(yīng)用,需要實時監(jiān)控帶寬,確保沒有異常流量。

C# + NTTTCP方案(測試吞吐量)

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

namespace ProductionBandwidthMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("生產(chǎn)環(huán)境帶寬監(jiān)控 - 墨夶出品");
            Console.WriteLine("正在初始化監(jiān)控...請稍等");
            
            // 1. 檢查NTTTCP是否已安裝
            if (!File.Exists("C:\\ntttcp\\ntttcp.exe"))
            {
                Console.WriteLine("錯誤:NTTTCP未安裝。");
                Console.WriteLine("請先安裝NTTTCP,然后重試。");
                Console.WriteLine("下載地址:https://github.com/Microsoft/ntttcp-for-linux");
                return;
            }
            
            // 2. 開始監(jiān)控
            StartNTTTCPMonitoring();
        }

        static void StartNTTTCPMonitoring()
        {
            // 1. 創(chuàng)建一個進(jìn)程,運(yùn)行NTTTCP測試
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = "ntttcp.exe",
                Arguments = "-s -t 300", // 發(fā)送方,測試300秒
                UseShellExecute = false,
                CreateNoWindow = true,
                RedirectStandardOutput = true
            };
            
            // 2. 啟動進(jìn)程
            using (Process process = Process.Start(startInfo))
            using (StreamReader reader = process.StandardOutput)
            {
                // 3. 讀取測試結(jié)果
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    Console.WriteLine(line);
                    
                    // 4. 檢查測試是否完成
                    if (line.Contains("Test run completed."))
                    {
                        Console.WriteLine("帶寬測試完成!");
                        break;
                    }
                }
            }
            
            Console.WriteLine("帶寬測試完成。按任意鍵退出...");
            Console.ReadKey();
        }
    }
}

注釋: 這個方案使用NTTTCP測試虛擬機(jī)的網(wǎng)絡(luò)吞吐量。NTTTCP是微軟提供的免費(fèi)工具,專門用于測試網(wǎng)絡(luò)性能。我曾經(jīng)在Azure虛擬機(jī)上用這個工具,發(fā)現(xiàn)一個奇怪的問題:虛擬機(jī)的帶寬比預(yù)期低了30%。后來發(fā)現(xiàn)是Azure的網(wǎng)絡(luò)配置問題,如果不是用NTTTCP測試,可能永遠(yuǎn)都發(fā)現(xiàn)不了這個問題。生產(chǎn)環(huán)境用這個,能幫你提前發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸!

三、避坑指南:你可能不知道的坑

C#監(jiān)控的"甜蜜陷阱"

  1. 性能計數(shù)器未啟用:PerformanceCounter需要系統(tǒng)性能計數(shù)器已啟用。解決方法:運(yùn)行l(wèi)odctr /R重置性能計數(shù)器。
  2. 權(quán)限問題:獲取網(wǎng)絡(luò)接口信息需要管理員權(quán)限。解決方法:以管理員身份運(yùn)行程序。
  3. 監(jiān)控對象錯誤:NetworkInterface.GetIPv4Statistics()監(jiān)控的是宿主機(jī)帶寬,不是虛擬機(jī)帶寬。解決方法:使用PerformanceCounter監(jiān)控虛擬機(jī)帶寬。

NTTTCP的"隱形陷阱"

  1. 需要兩臺VM:NTTTCP測試需要兩臺VM充當(dāng)發(fā)送方和接收方。解決方法:在Azure中創(chuàng)建兩臺VM,確保它們在同一可用性集。
  2. 測試時間太短:默認(rèn)測試時間是60秒,可能不夠。解決方法:使用-t參數(shù)指定更長的測試時間。
  3. 網(wǎng)絡(luò)配置影響:負(fù)載均衡器或防火墻可能影響測試結(jié)果。解決方法:確保測試時排除負(fù)載均衡器。

四、終極決策指南

看完上面的對比,你可能會問:“到底該選哪個?”

別急,我給你個簡單直接的選擇題

  1. 你的監(jiān)控需求簡單實時,只需要知道當(dāng)前帶寬? C# + PerformanceCounter
  2. 你需要深度分析網(wǎng)絡(luò)流量,比如查看數(shù)據(jù)包內(nèi)容? Wireshark + C#
  3. 你需要測試吞吐量,確保虛擬機(jī)性能達(dá)標(biāo)? NTTTCP
  4. 你的團(tuán)隊熟悉C#,不想學(xué)習(xí)新工具? C#方案
  5. 你的團(tuán)隊熟悉網(wǎng)絡(luò)工具,想用專業(yè)工具? NTTTCP

記?。簺]有最好的工具,只有最適合你項目的工具。

五、我的實戰(zhàn)建議

基于我的10年開發(fā)經(jīng)驗,我給你幾個實用建議

  • 不要只用一種方法:你可以用C# + PerformanceCounter做日常監(jiān)控,用NTTTCP做性能測試。這叫"組合拳",現(xiàn)在很流行。
  • 先做PoC(概念驗證):在決定之前,用真實數(shù)據(jù)跑個測試。比如,用100個虛擬機(jī),對比C#和NTTTCP的監(jiān)控效果。
  • 別被"官方推薦"忽悠:微軟推薦PerformanceCounter,但不意味著它適合你。關(guān)鍵看你自己的需求。
  • 團(tuán)隊學(xué)習(xí)成本:如果你的團(tuán)隊已經(jīng)熟悉C#,PerformanceCounter可能更容易上手;如果團(tuán)隊熟悉網(wǎng)絡(luò)工具,NTTTCP會更快。

六、 別再糾結(jié)了,監(jiān)控到位就是贏

最后,送你一句話:“帶寬監(jiān)控不是選’最好’的,而是選’最適合’的。”

我見過太多團(tuán)隊,因為帶寬監(jiān)控缺失,導(dǎo)致后期性能問題,浪費(fèi)大量時間。C# + PerformanceCounter和NTTTCP都不是銀彈,但當(dāng)你用對了地方,它們就是神器。

記住:C# + PerformanceCounter是日常監(jiān)控的溫柔小秘書,NTTTCP是性能測試的靈活小能手。 選對了,你就是那個讓團(tuán)隊點(diǎn)贊的"技術(shù)大神";選錯了,你就是那個"把項目搞崩了"的"背鍋俠"。

所以,下次再有人問你"C#如何監(jiān)控虛擬機(jī)帶寬?",別急著回答,先問清楚:你的項目到底在干啥?

以上就是C#監(jiān)控虛擬機(jī)帶寬的兩種實用方法的詳細(xì)內(nèi)容,更多關(guān)于C#監(jiān)控虛擬機(jī)帶寬的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C# string.IsNullOrEmpty和IsNullOrWhiteSpace方法實現(xiàn)

    C# string.IsNullOrEmpty和IsNullOrWhiteSpace方法實現(xiàn)

    本文主要介紹了C# string.IsNullOrEmpty和IsNullOrWhiteSpace方法實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • C#讀取與寫入txt文件內(nèi)容的實現(xiàn)方法

    C#讀取與寫入txt文件內(nèi)容的實現(xiàn)方法

    在 C# 中讀取和寫入文本文件內(nèi)容是一個常見的任務(wù),本文主要介紹了使用幾種不同方法讀取和寫入文本文件的示例,并通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-08-08
  • C#中實現(xiàn)Word文本查找與高亮的多種方法

    C#中實現(xiàn)Word文本查找與高亮的多種方法

    在處理大量Word文檔時,你是否曾為查找并高亮特定內(nèi)容而煩惱?無論是合同關(guān)鍵詞的審查、報告中異常數(shù)據(jù)的標(biāo)注,還是教學(xué)資料的重點(diǎn)突出,手動操作無疑是耗時且易出錯的,本文將深入探討C#中實現(xiàn)Word文本查找與高亮的多種方法,需要的朋友可以參考下
    2026-02-02
  • C#實現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法

    C#實現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法

    這篇文章主要介紹了C#實現(xiàn)在購物車系統(tǒng)中生成不重復(fù)訂單號的方法,涉及C#中時間與字符串操作的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • c# 值類型實例構(gòu)造器

    c# 值類型實例構(gòu)造器

    CLR總是允許創(chuàng)建值類型的實例。另外值類型不一定需要定義構(gòu)造器,c#編譯器不會為值類型生成默認(rèn)的無參構(gòu)造器
    2012-10-10
  • C#中通過使用Connection類來實現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實例

    C#中通過使用Connection類來實現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實例

    今天小編就為大家分享一篇關(guān)于C#中通過使用Connection類來實現(xiàn)打開/關(guān)閉數(shù)據(jù)庫的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#預(yù)處理器指令的用法實例分析

    C#預(yù)處理器指令的用法實例分析

    這篇文章主要介紹了C#預(yù)處理器指令的用法,以實例形式較為詳細(xì)的分析了預(yù)處理器指令的原理與相應(yīng)的用法,有助于深入理解C#程序的運(yùn)行原理,需要的朋友可以參考下
    2014-11-11
  • 一文帶你了解C#操作MySql的方法

    一文帶你了解C#操作MySql的方法

    工作中大多數(shù)情況下用的都是 MySql 但一直沒有記錄,相關(guān)操作。這篇文章以便 MySql.Data 庫進(jìn)行MySql操作,使用 C# 執(zhí)行 SQL 語句,造個輪子
    2023-03-03
  • C#10的13個特性

    C#10的13個特性

    本文詳細(xì)講解了C#10的13個特性,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 詳解C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況

    詳解C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況

    這篇文章主要介紹了C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論

呈贡县| 定远县| 诸暨市| 平度市| 九龙县| 新绛县| 扎鲁特旗| 临清市| 潜江市| 景德镇市| 福泉市| 赤水市| 刚察县| 工布江达县| 河津市| 开江县| 百色市| 古田县| 木兰县| 鄯善县| 德庆县| 河津市| 高要市| 临猗县| 应城市| 方城县| 达日县| 浦城县| 辽宁省| 孟津县| 西城区| 五指山市| 顺义区| 阜南县| 中牟县| 靖江市| 施甸县| 牡丹江市| 共和县| 白沙| 滨州市|