我的ASP.NET Web应用程序提供了一个基本上接受excel电子表格的导入功能。然后需要对电子表格进行处理,解析,验证等。这可能需要很长时间,具体取决于电子表格的大小。 我没有在Web应用程序上执行此操作,而是决定编写一个控制台应用程序,负责处理长时间运行的任务。
架构非常简单,有一个名为" job_queue" Web应用程序在启动导入时写入,包含导入所需的所有信息。控制台应用程序然后从队列中获取未完成的作业,处理它们,并将它们标记为完整,以便它们不会再被拾取。
控制台应用程序需要始终处于待机模式,通过反复检查" job_queue"准备好接收新作业。表
我的问题是控制台应用的最佳解决方案是什么?
目前我有类似的东西永远运行。但是,它似乎非常耗费资源,有时会挂起并需要重新启动控制台应用程序。
public static void Main(string[] args)
{
while (true) // Keep repeating the same thing
{
ProcessJobs();
}
}
如何改进此代码以使其更加资源友好且更强大?
提前致谢
答案 0 :(得分:1)
可能最简单的方法是设置一个Windows计划任务,该计划任务按计划执行您的控制台应用程序。您可以从控制台中删除while循环,只需依赖Windows即可根据需要随时运行控制台应用程序。
Windows计划任务也可以配置为在失败或无响应的情况下自动重启。
答案 1 :(得分:0)
我认为使用计划任务不是首选解决方案,因为在获得下一个文件之前,您一直在查询数据库。不是很有效率。 相反,您可以使用FileSystemWatcher在磁盘上创建新文件时收到通知,然后处理该文件。
http://devproconnections.com/net-framework/how-build-folder-watcher-service-c
另一种选择 - 如果您的流程更复杂(例如:您希望能够从文件中间继续读取,您希望在特定时间内处理特定文件),则可以使用WWF:
http://msdn.microsoft.com/en-us/library/vstudio/ms734631%28v=vs.90%29.aspx
HTH