【发布时间】:2009-06-04 14:44:37
【问题描述】:
我当前的网站设置为在有人首次登录该应用程序时为某些人留言。留下的消息数量可能在 1000 到 10000 之间,每条消息都是一个查询,所有查询都在一个事务语句中。
是的,我知道这似乎是糟糕的设计,这不是我的问题。
目前,当用户登录时,服务器必须先完成所有查询,然后用户才能实际执行任何操作。我的意思是,用户查看登录屏幕,直到超时启动并重置页面。最近我们已经等待了长达 30 分钟(!)
我想把这个过程放在一个线程上,这样用户就可以登录网站,做他/她需要做的任何活动,查看/删除他们的消息,同时不受消息传递者的阻碍。
我的问题是,简单地分拆一个新线程来处理这个过程是否可以解决问题(即允许用户在传递者留下消息时工作)?另外,分离线程是否会影响同一服务器上的其他 Web 应用程序?
编辑基于 KM 的 cmets
简化模式:
任务表:
TaskID StartDate EndDate PercentComplete TSK1 4/17/09 5/17/09 60 TSK2 3/19/09 3/29/09 80 TSK3 1/1/08 2/9/09 100分配表:
任务 ID 资源 ID TSK1 111 TSK1 222 TSK2 222 TSK2 333 TSK2 444 TSK3 111 TSK3 333消息表架构:
主题 接收者 发送者 内容 逾期任务 111 000 任务 TSK1 逾期。 逾期任务 222 000 任务 TSK1 逾期。 逾期任务 222 000 任务 TSK2 逾期。 逾期任务 333 000 任务 TSK2 逾期。 逾期任务 444 000 任务 TSK2 逾期。因此,代码将让所有人分配到一个过期任务(即 EndDate 早于今天并且 != 100% 完成)并给他们留言告诉他们
我认为真正的问题是我正在使用选择查询从数据库中获取分配给过期任务的人员,然后在调用数据库插入消息之前使用 C# 代码编写消息和事务。
【问题讨论】:
-
提供有关如何将消息加入任务的信息
-
消息未加入任务。我只需要任务 ID,因此我可以将它放在消息正文中。需要将资源加入到消息中,因为它们将读取它们。
标签: asp.net sql-server performance multithreading