【发布时间】:2011-05-21 09:48:28
【问题描述】:
我在这个问题上苦苦挣扎了一段时间。
在我的网站上,要求用户参加考试。当他提交答案时,我调用了一个 WCF 服务,它将他的数据推送到数据库中。这很简单,但随着用户数量的增加,确实会占用大量数据库。
所以,为了提高性能(避免大量调用 DB),我有 -
一个。在服务中实现缓存。
b.实现线程(用于异步工作) - 将缓存数据推送到数据库。
因此,现在,每当调用保存答案时,它都会将数据存储在服务缓存中。 Parallely,我运行一个线程(因为我只想将数据推送到 DB 一次 - 在用户测试结束时 - 并将临时答案数据添加到缓存中),然后我返回调用,因为我不想要用户等待。我运行的线程必须有 15 分钟的超时。如果用户在 15 分钟内没有提交任何答案,则缓存结果应保存到 DB。到目前为止,它很简单并且已经成功地做到了这一点。
我卡住的地方是,如果用户在这 15 分钟内发送了一些答案并调用了服务,则该线程的超时应重置为接下来的 15 分钟。所以,它有点像线程的滑动计时器。
我用谷歌搜索了很多,但似乎没有办法跟踪一个线程。而且,如果我在每个保存数据请求上创建一个新线程,那么它只会在数据库上重现相同的负载。
我觉得如果有某种方法可以跟踪我最初启动的线程并相应地对其进行操作,我将能够实现所需的目标。
请指教和建议。
带着紧迫感和感谢
SV
【问题讨论】:
-
如何安排线程超时?你会阻塞线程 15 分钟吗?你确定 db writes 是你的瓶颈,你测量过吗?
-
Albin,到目前为止,我一直使用 System.Timer 类计时器,设置为运行一次。
标签: .net multithreading caching frameworks