并发处理

kx_long 2009-02-12 03:31:45
public static class ObjectContextExtensionMethods
{
public static void Submit<T>(this ObjectContext db, T entity)
{

try
{
db.SaveChanges();
}
//并发异常
catch (OptimisticConcurrencyException)
{
db.Refresh(System.Data.Objects.RefreshMode.ClientWins, entity);
db.SaveChanges();
}
finally
{
db.Dispose();
}
}
}
...全文
94 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
最好sleep一个从10到200毫秒的时间 --> 最好sleep一个从10到200毫秒之间的随机确定的时间
  • 打赏
  • 举报
回复
单纯从你的代码上来看,最好sleep一个从10到200毫秒的时间,而不是立刻重试。

一般来说,数据库系统本身都处理了并发,因此当数据库api抛出并发冲突时,一定是数据库系统已经等待了足够长的时间,所以重试保存操作其实是一个显得多余的做法。

如果果真负载很高,那么你最好是使用数据缓存策略使得应用程序一旦读取了一些记录(只要尚未修改这些记录就)尽可能地不要去反复读取数据库而是拿出缓存数据,或者即使读取数据库也要使用不加锁的方式读取,减少了数据库锁管理的负载。
kx_long 2009-02-13
  • 打赏
  • 举报
回复
谢谢sp1234指点,这是看了你的帖子,才写出来的。

请指导一下缓存策略

我们是这样做的“只把常用的部分数据,缓存下来,在读缓存中的数据是,先检测,数据有没有更新,有则重新获取,重新缓存



yezie 2009-02-12
  • 打赏
  • 举报
回复
。。。你想说什么

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧