首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ASP.NET中加速调用命令行工具的循环?

如何在ASP.NET中加速调用命令行工具的循环?
EN

Stack Overflow用户
提问于 2012-01-21 23:39:17
回答 2查看 360关注 0票数 1

我有一个ASP.NET页面,它(快速)获取游戏服务器ip地址的列表,并循环访问它们,对它们运行命令行工具以获取特殊的游戏服务器信息。我必须使用命令行工具,因为我不知道它是如何从机器中获取信息的,我也不想重新发明轮子。循环是最慢的部分(惊喜)。每次命令行工具运行最多需要一秒钟,因此平均轮询大约60个ip地址,页面加载可能需要30-60秒来呈现我需要的结果。

我最明显的想法是“多线程!”好吧,我尝试了w/线程池,但如果超过一个人同时访问该页面,最终会出现一个挂起的网站。这使得每次只使用4-5次调用,直到60次,加载时间为10秒。因此,它不仅与多个用户挂起,它仍然太慢。如果我能把时间控制在3秒以内,我会很高兴的。

我应该提一下这个页面是在一个共享主机环境中。我以前在共享主机环境之外有一个很好的解决方案,但我必须削减成本,现在我正在努力让它与共享环境一起工作。

还有希望吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-22 00:59:29

您真的不应该“按需”轮询这些服务器。最好使用ASP.NET显示服务器信息列表,并使用一些其他进程-如windows服务或计划任务-每隔几分钟轮询服务器以生成该列表。总而言之:服务将创建一个XML文件(例如),ASP.NET将向用户显示该文件。这样,查看页面的用户数量不会影响您尝试轮询服务器的次数。

更新

您需要确保ping服务器的进程是单例进程。具体地说,单例是一个只能存在单个实例的类。在更一般的情况下,您需要设置一个全局标志来表示“我当前正在pinged服务器”,另一个全局日期时间值来表示“我最后一次pinged服务器是在hh:mm:ss”-您可以使用应用程序字典来存储布尔标志和日期时间。每次有人加载您的页面时,检查该标志以查看它是否已经在time服务器。如果是,请不要这样做。如果标志显示为ok,则检查当前时间和上次执行的时间。如果少于5分钟,请不要这样做。所有这些都应该在后台线程中完成。此线程应更新App_Data中的xml文件。对页面的所有请求都应该立即呈现此数据。页面请求永远不应该阻塞。如果该文件在第一次调用时不存在,则返回“正在执行ping,5分钟后重试”。跟上?

在此处阅读有关ASP.NET应用程序状态字典的信息:http://msdn.microsoft.com/en-us/library/ie/ms178594.aspx

票数 3
EN

Stack Overflow用户

发布于 2012-01-22 01:07:44

技术含量较低的解决方案可能是调用一个bat文件来执行每个exe调用,而不是从asp.net重复调用exe。将重复的shell保存到操作系统开销中

每次对exe的调用都可以将结果通过管道传输到一个文本文件,一旦控制从bat返回到asp.net应用程序,就可以一次读回所有文本文件。

如果ip列表发生变化,则asp.net应用程序可以在运行之前创建bat文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8954242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档