我有一个WP8应用程序,它有多个线程(有时多达40个),这些线程必须从webservice获取数据,然后提交到localdb。
我实现了一个基于AutoResetEvent的模式,其中每个Repository方法看起来有点像这样:
public class MySuperAppRepository
{
public static AutoResetEvent DataAccess = new AutoResetEvent(true);
public MyFancyObject CreateMyFancyObject(string path, int something)
{
DataAccess.WaitOne();
try
{
using (var dbContext = new MySuperAppDataContext(MySuperAppDataContext.DbConnectionString))
{
var mfo = new MyFancyObject();
dbContext.MyFancyObjects.InsertOnSubmit(mfo);
mfo.Path = path;
mfo.Something = something;
dbContext.SubmitChanges();
return mfo;
}
}
finally
{
DataAccess.Set();
}
}
}这一切都是美好和干净的,但一旦我得到多个线程(如前所述),性能是可悲的。我可以得到很多请求下来,然后他们都在等待db是免费的。
还有更好的选择吗?使用lock(object)会提高性能吗?
发布于 2014-04-01 14:59:16
您是否可以尝试不为每个数据操作创建一个新的DataContext。
还可以尝试一下提到的这里的一些最佳实践。
特别是:
使用版本列启用快速更新,优化表上更新操作性能的最简单方法之一是添加版本列。此优化特定于Windows的。例如,在实体中添加以下代码。
[Column(IsVersion=true)]
private Binary _version;https://stackoverflow.com/questions/22785592
复制相似问题