看了许多博客试图了解在.Net 3.5下使用PLinq
结果发现所有指向微软这些资源(似如Microsoft Parallel Extensions to Framework 3.5)的下载已经被撤销,无法找到,资源的页面重定向到其他的页面
感觉超级蛋疼,
后来无意找到一个dll成功使3.5下的Linq支持AsParallel()方法,对于这种方式实现并行查询是否存在什么问题作为菜鸟的我就不得而知了。
运行结果如下图,在这个简单的例子中发现使用了AsParallel后效率有极大的提升。
附部分代码:
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Threading;
using System.Threading.Tasks;
private static string
withAsParallel
(DCDataContext dc)
{
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
IQueryable<tb_ticket> zz = null;
stopwatch.Start();
for (int i = 0; i < 20; i++)
{
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
return milliseconds.ToString();
}
private static string withOutAsParallel (DCDataContext dc)
{
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
IQueryable<tb_ticket> zz = null;
stopwatch.Start(); // 开始监视代码运行时间
for (int i = 0; i < 20; i++)
{
zz=from t in dc.tb_tickets //WithoutAsParallel where blablabla省略
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
IQueryable<tb_ticket> zz = null;
stopwatch.Start();
for (int i = 0; i < 20; i++)
{
zz=from t in dc.tb_tickets.AsParallel()
//where blablabla省略
select t;
}
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
return milliseconds.ToString();
}
private static string withOutAsParallel (DCDataContext dc)
{
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
IQueryable<tb_ticket> zz = null;
stopwatch.Start(); // 开始监视代码运行时间
for (int i = 0; i < 20; i++)
{
zz=from t in dc.tb_tickets //WithoutAsParallel where blablabla省略
select t;
}
stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
return milliseconds.ToString();
}
}
stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数
return milliseconds.ToString();
}
//Main函数
static void Main(string[] args)
{
DCDataContext dc = new DCDataContext();
for (int i = 50; i > 0; i--)
{
Console.WriteLine("NoParallel:" + withOutAsParallel(dc) + "ms" + " Parallel:" + withAsParallel(dc) + "ms");
{
DCDataContext dc = new DCDataContext();
for (int i = 50; i > 0; i--)
{
Console.WriteLine("NoParallel:" + withOutAsParallel(dc) + "ms" + " Parallel:" + withAsParallel(dc) + "ms");
Console.WriteLine("Parallel:" + withAsParallel(dc) + "ms" + " NoParallel:" + withOutAsParallel(dc) + "ms");
}
}
}
}
PS:
附件:http://download.csdn.net/detail/lin437922751/4653381