亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# 減少嵌套循環(huán)的兩種方法

 更新時間:2021年06月17日 09:46:45   作者:舒碧  
最近在解決性能優(yōu)化的問題,看到了一堆嵌套循環(huán),四五層級的循環(huán)真的有點過分了,在數(shù)據(jù)量成萬,十萬級別的時候,真的非常影響性能。本文介紹了C# 減少嵌套循環(huán)的兩種方法,幫助各位選擇適合自己的優(yōu)化方案,優(yōu)化程序性能

當然,除了關注明顯的循環(huán)例如for、foreach,還應該關注隱晦一點的循環(huán),例如datatable.select(),linq之類的list.where、list.find等。

要優(yōu)化,排除業(yè)務問題,要考慮的就是代碼技術了。看到循環(huán)查找數(shù)據(jù),盡可能向Dictionary靠攏。

eg1:一個簡單的key對應一條datarow

優(yōu)化前:

using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            DataTable table = new DataTable();
            ...
            for (int i = 0; i < 1000000; i++)
            {
                var row = table.AsEnumerable().FirstOrDefault(r => r["num"].ToString() == i.ToString());
                ...
            }
        }
    }
}

優(yōu)化后:

using System.Data;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            DataTable table = new DataTable();
            ...
            var dict = table.AsEnumerable().ToDictionary(r => r["num"].ToString());
            for (int i = 0; i < 1000000; i++)
            {
                if (dict.ContainsKey(i.ToString()))
                {
                    var row = dict[i.ToString()];
                }
                ...
            }
        }      
    }
}

eg2:一個拼裝的Key對應多條DataRow的字典

優(yōu)化前:

using System.Data;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            DataTable table = new DataTable();   
            ...
            for (int i = 0; i < 1000000; i++)
            {
                var name = "";
                ...
                var rows = table.AsEnumerable().Where(r => r["num"].ToString() == i.ToString() && r["name"].ToString() == name);
            }
        }             
    }
}

優(yōu)化后:

using System.Data;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            DataTable table = new DataTable();
            var group = table.AsEnumerable().GroupBy(r => GetGroupKey(r["num"].ToString(), r["name"].ToString()));
            var dict= group.ToDictionary(r=>r.Key);
            ...
            for (int i = 0; i < 1000000; i++)
            {
                var name = "";
                var key = GetGroupKey(i.ToString(), name);
                if (dict.ContainsKey(key))
                {
                    var rows = dict[key];
                }               
                ...
            }
        }      
       
        private static string GetGroupKey(string _num,string _name)
        {
            return $"num={_num}|name={_name}";
        }
    }
}

量變會引起質變。

以上就是C# 減少嵌套循環(huán)的兩種方法的詳細內容,更多關于C# 減少嵌套循環(huán)的資料請關注腳本之家其它相關文章!

相關文章

  • 基于C#編寫獲取硬件信息的工具類

    基于C#編寫獲取硬件信息的工具類

    這篇文章主要為大家詳細介紹了如何利用C#編寫一個獲取硬件信息的簡單工具類,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-11-11
  • .NET中的Timer類型用法詳解

    .NET中的Timer類型用法詳解

    這篇文章主要介紹了.NET中的Timer類型用法,較為詳細的分析了Timer類型在各種環(huán)境下的用法,需要的朋友可以參考下
    2014-08-08
  • C#中關于序列化與反序列化的三種方法

    C#中關于序列化與反序列化的三種方法

    序列化是將對象的狀態(tài)信息轉換為可以存儲或傳輸?shù)男问降倪^程,本文主要介紹了C#中關于序列化與反序列化的三種方法,文章具有一定的參考價值,感興趣的可以了解一下
    2022-03-03
  • c# 使用handle.exe解決程序更新文件被占用的問題

    c# 使用handle.exe解決程序更新文件被占用的問題

    這篇文章主要介紹了c# 使用handle.exe解決程序更新文件被占用的問題,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • .net中常用的正則表達式

    .net中常用的正則表達式

    這篇文章介紹了.net中常用的正則表達式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C# InitializeComponent()方法案例詳解

    C# InitializeComponent()方法案例詳解

    這篇文章主要介紹了C# InitializeComponent()方法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法

    C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫之讀寫數(shù)據(jù)庫的方法,簡單分析了C#針對SQLite數(shù)據(jù)庫的讀寫及顯示等操作相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C#創(chuàng)建二叉搜索樹的方法

    C#創(chuàng)建二叉搜索樹的方法

    這篇文章主要介紹了C#創(chuàng)建二叉搜索樹的方法,涉及C#二叉搜索樹的實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中Linq的去重方式Distinct詳解

    C#中Linq的去重方式Distinct詳解

    本文詳細講解了C#中Linq的去重方式Distinct,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C# Winform自動更新程序實例詳解

    C# Winform自動更新程序實例詳解

    這篇文章主要為大家詳細介紹了C# Winform 自動更新程序實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論