【发布时间】:2013-07-26 09:55:08
【问题描述】:
我在 .Net 3.5 和 SqlHelper 上使用 Sql Server 2008 R2 与 2008、C#。
一个方法,比如 updateData(int id) 加载一些与“id”相关的数据,进行大量计算和处理并重新提交数据。有一个单独的程序 doThings(int id) 执行一组任务,其中每个任务操作与“id”相关的数据,然后在事务中提交该数据。其中一些任务在提交后会调用 updateData(int id),但是 updateData(int id) 并未按照最新提交更新数据。过了一会儿,如果我重新运行 updateData(int id),那么更新就完成了。
为了更清楚,这是程序正在做的事情-
doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
doTask(int id) //updates some table related to id and calls updateData()
...
输出 - 数据未更新
过了一会儿-
updateData() //recalculates and updates the data
输出 - 数据已更新
我知道 SQL Server 缓存查询结果集。但是,如果我更新了缓存中的表的一部分,那么它不应该重新创建结果集。我在不同的环境(测试和生产)中尝试过这个,没有太多帮助。
每个 doTask(int id) 都在使用事务来更新数据库,并且该事务已完成,而最后一次调用 updateData 将不会像最终那样更新数据。一旦它的事务完成,updateData() 被调用,它也使用事务。有什么与缓存相关的东西可以在这里提供帮助吗?因为我必须在这里发布的代码量非常大,我什至不允许这样做。
我尝试了 2 件事,并且在这两种情况下都有效-
- 添加了 500ms 的 thread.sleep
- 在 doTask() 中调试并暂停了对 updateData() 的调用
【问题讨论】:
-
不,还有其他事情正在发生。贴一些代码。
标签: c# .net sql-server caching