【引】
在上一篇有关并行化的《有关对耗时很大循环进行并行化优化的探讨 之一:并发搜索的处理》博文中,我们看到,不使用并行语言,而使用基本的编程语言配合多线程可以进行并行化处理,本文进一步将并行化操作进行一个简单封装,并开始完成一个并行化的数据操作,以供大家参考。
【多重循环的操作】
有很多方法可以实现并行查询,必须并行化Linq就是很不错的途径,相比linq to entity,真正实现了性能的有效提升,但如果考虑在循环中进行复杂的业务处理,进行独立的并行化编程会更有效的帮助我们实现系统的优化。
下面我们以一个简单的操作为例,看看如何自己做一个并行化的程序:
在如下的例程中,我们自定义了一个继承于datatable的TLoopTable对象,并向该表格添加500×5条Tdata记录,很不幸的是,每条tdata记录需要10毫秒才能生成。使用该TLoopTable对象填充到datagridview的时间是39秒左右,
我们就以此应用开始进行我们的并行化优化。
class TLoopTable : DataTable
{
public const int CON = 500;
public TLoopTable()
{
this.Columns.Add("C1");
this.Columns.Add("D1");
this.Columns.Add("E1");
this.Columns.Add("F1");
this.Columns.Add("G1");
}
public void AddRows()
{
List<LoopD> plist = new List<LoopD>();
plist.Add(new LoopD("C", 1));
plist.Add(new LoopD("D", 2));
plist.Add(new LoopD("E", 3));
plist.Add(new LoopD("F", 4));
plist.Add(new LoopD("G", 5));
for (int i = 0; i < CON; i++)
{
TData [] tdl = new TData [5];
foreach (LoopD p in plist)
{
tdl[p.Col -1] = new TData(p.Col, i, p.Str) ;
}
this.Rows.Add(tdl);
}
}
class LoopD
{
public int Col;
public string Str;
public LoopD(string s, int c)
{
Col = c ;
Str = s ;
}
}
class TData