让我们假设一个方法CountString,给定一个字符串数组和一个int,返回长度大于int的字符串数.如果我必须尽可能地利用多核硬件,那就足够了:
public int CountString(string[] s, int i)
{
return s.AsParallel().Count( res => res.length > i);
}
Run Code Online (Sandbox Code Playgroud)
或者我必须以某种方式使用任务甚至混合任务和PLinq?
它必须只被视为一个简单的例子,我知道这种方法不会对硬件性能产生太大影响.
我想知道这样做是否更好,使用AsParallel(),或者如果更好地声明方法async并await在方法体中使用(即使我不知道如何).
我正在尝试通过 c# 中的 Visual Studio 2013 在基于实体框架的数据库上保存值。
我必须节省数据库拍卖数据。每个拍卖都有自己的 id,一个 int,这是它的主键。
当我尝试在数据库上添加拍卖时,我执行以下操作:
using(var c = new AuctionSiteContext(ConnectionString)
{
var auction = new Database.Auction
{
Id = auctionId, //auctionId=0
/*
other stuff
*/
};
c.Auctions.Add(auction);
c.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
问题是,auctionId 设置为 0,我通过调试器检查了它,但是当我执行 saveChanges(); 时 并再次控制该网站上唯一拍卖的值,其Id已更改为1。
老实说,我不明白为什么 savechanges() 调用可以更改该值,因为数据库上的拍卖列没有限制,我的意思是,为什么它不能简单地为 0?
每次我添加拍卖时都会这样做,id 增加 1,但所有其他参数保持不变。
编辑:我决定从 0 开始序列,这就是这个意思。但我什至尝试从 1 开始,这意味着第一次拍卖的 id=1,但在保存更改后它变成了 2。
我必须实现扩展方法
public static IEnumerable<TResult> MyMerge<T1, T2, TResult>(this IEnumerable<T1> s1, IEnumerable<T2> s2, Func<T1, T2, TResult> f)
Run Code Online (Sandbox Code Playgroud)
返回序列f(x1,y1),f(x2,y2)...其中所有xn是s1的元素,所有yn是s2的元素.
我的问题是这个序列必须具有相同长度的最短序列,并且s1和s2都可以是无限的.如果他们不这样我就能做到
var res = new List<TResult>();
for (var i = 0; i<Math.Min(s1.Count(), s2.Count()) ; i++)
{
res.Add(f(s1.ToArray()[i], s2.ToArray()[i]));
}
return res;
Run Code Online (Sandbox Code Playgroud)
但是当一个序列比另一个序列长时,这也会破坏.我该如何解决这个问题?