首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

多執行緒在 Visual C# 網路程式設計中的應用(五):多執行緒掃描器完整實作與效能驗證

     編輯:關於C語言

button1_Click:建立多執行緒並行掃描


private void button1_Click(object sender, EventArgs e)
{
    listBox1.Items.Clear();
    startTime = DateTime.Now;

    string ipPrefix = $"{numericUpDown1.Value}.{numericUpDown2.Value}.{numericUpDown3.Value}.";
    int min = (int)numericUpDown4.Value;
    int max = (int)numericUpDown5.Value;

    if (min > max) { MessageBox.Show("IP 區間不合法!"); return; }

    int threadCount = max - min + 1;
    Thread[] threads = new Thread[threadCount];

    progressBar1.Minimum = min;
    progressBar1.Maximum = max + 1;
    progressBar1.Value = min;

    for (int i = min; i <= max; i++)
    {
        int idx = max - i; // 反向索引,順序不重要
        PingScanner scanner = new PingScanner();
        scanner.IP = ipPrefix + i;
        scanner.UpdateCallback = new UpdateList(UpdateMyList);

        threads[idx] = new Thread(new ThreadStart(scanner.Scan));
        threads[idx].Start();
    }
}

執行結果:從 43 秒降至 10 秒

掃描 10.138.198.1 ~ 10 十個 IP:

  • 單執行緒版:循序 DNS 解析,**43 秒**
  • 多執行緒版:十個執行緒並行,**約 10 秒** (受限於最慢單一解析時間)

多執行緒掃描執行畫面

圖 03:多執行緒掃描網路電腦 - 執行介面

核心優勢總結

  • **執行時間與掃描數量脫鉤**:單執行緒 O(N),多執行緒約 O(1) (受限於並行度與最慢節點)
  • **UI 保持回應**:主執行緒僅負責收集回呼更新 UI,不阻塞
  • **資源權衡**:執行緒建立/銷毀開銷、記憶體佔用、同步鎖 (lock) 爭用 — 大規模掃描建議使用 ThreadPool 或 Parallel.ForEach 限制並行數。

本系列完結重點回顧

  1. 取得系統時間與 TimeSpan 計算耗時
  2. 網路程式引入多執行緒動機:阻塞操作 (DNS、Connect、Recv) 並行化
  3. Thread 建立、ThreadStart 委派、Start() 啟動
  4. 跨執行緒更新 UI 必須透過 delegate + Control.Invoke (本範例以 UpdateList 委派實作)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved