欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

當(dāng)然,除了關(guān)注明顯的循環(huán)例如for、foreach,還應(yīng)該關(guān)注隱晦一點(diǎn)的循環(huán),例如datatable.select(),linq之類(lèi)的list.where、list.find等。

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

eg1:一個(gè)簡(jiǎn)單的key對(duì)應(yīng)一條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:一個(gè)拼裝的Key對(duì)應(yīng)多條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}";
        }
    }
}

量變會(huì)引起質(zhì)變。

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

相關(guān)文章

最新評(píng)論