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

公司主營業(yè)務:成都網(wǎng)站設計、做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出平原免費做網(wǎng)站回饋大家。
當然,除了關注明顯的循環(huán)例如for、foreach,還應該關注隱晦一點的循環(huán),例如datatable.select(),linq之類的list.where、list.find等。
要優(yōu)化,排除業(yè)務問題,要考慮的就是代碼技術了??吹窖h(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 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 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 "";
...
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 "";
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}";
}
}
}
量變會引起質(zhì)變。
名稱欄目:C#減少嵌套循環(huán)具體方法
轉載注明:http://www.dlmjj.cn/article/dhgsseo.html


咨詢
建站咨詢
