我有一个ASP.NET MVC 5 Web应用程序,该应用程序每隔一小时运行多个用于Web抓取的功能。该应用程序已部署到提供128 mb应用程序池内存的临时托管服务器。
我的问题是几天一次,它将重复的记录添加到数据库上的Detail
表中,我不知道为什么,非常感谢您!
由于代码很大,我将只分享相关部分和我的怀疑,因此,如果您对我有所帮助,我将不胜感激!
我有一个异步函数DoUpdates()
,这是进行Web抓取的函数。在此过程中,如果在我的数据库中不存在已废弃的数据,则将其添加,否则明细表将相应地更新。此过程大约需要3-4分钟才能完成。
我在代码中两个位置的新线程中运行DoUpdates
函数。
a)在global.asax的app_start函数中
b)每小时一次在计时器内。
这就是我所说的:
var _updateThread = new Thread(() =>
{
DoUpdates();
});
_updateThread.SetApartmentState(ApartmentState.STA);
_updateThread.Start();
DoUpdates函数完成后,我运行ProcessTasks函数以保存更改。因此,此时的场景是:
a)有/有新数据,并且有更新到现有数据
b)没有/没有新数据,仅更新现有数据。
public async Task ProcessTasks()
{
if(TasksToProcess.Count!=0) //If there are new records add it
_db.SCHEDULES.AddRange(TasksToProcess);
Trace.WriteLine("saving");
await _db.SaveChangesAsync();
Trace.WriteLine("saved");
}
这可能导致什么?这是赛车问题吗?还是因为应用程序池内存已完成?
请不要让更新功能正常工作,运行30-40次,但是我知道应用程序池完成了,因为在某些时候它没有在计划的时间启动
非常感谢您的帮助!谢谢