【发布时间】:2011-11-26 00:42:14
【问题描述】:
我有一个即将发布的 asp.net 网站。该网站处理业务管理。我正在为发布做准备的一件事是将大量数据从购买的企业列表上传到我们的 SQL 数据库中。为此,我使用了一种非常简单的方法:我将 .csv 文件放在服务器上的一个文件夹中,并在临时页面上使用 Page_Load 事件来执行处理数据所需的逻辑并将其放入我们的数据库中.
这是一个漫长的过程。业务列表被分解成一大堆文件,我在页面上设置了脚本,以便在每次刷新页面时从一个文件中导入所有数据。每个文件大约需要 10 分钟。
奇怪的是:当处理这些数据时(当服务器正在处理所有内容时,在 page_load 方法终止之前)网站被阻止 - 没有其他用户可以访问它,并且不会加载网站上的其他页面。他们被困在“正在连接...”阶段。
目前这不是一个大问题,因为该站点只是在测试环境中运行。但是,当网站上线时,我可能需要使用类似的脚本将数据放入数据库,显然,在这种情况发生时访问所有被阻止的用户是不可接受的。
我相当确定这不是 SQL Server 的问题,因为我能够在此进程运行时同时进行查询,所以 Web 服务器一定有问题。
我无法发布代码摘录,因为它冗长且技术性强。但是,没有什么困难:该方法从 .csv 文件中读取数据,对其进行处理,并对文件的每一行向外部服务发出 HTTP 请求,以收集更多相关数据。然后,将所有数据插入到 SQL 数据库中。
据我了解,网络服务器不应该像这样阻塞。即使一个线程/用户需要大量资源,它们也应该能够同时为大量用户提供页面。
任何人都可以建议可能会发生什么?我应该从哪里开始寻找解决方案?
【问题讨论】:
-
如果您的数据处理与您的网站无关,您可以使用另一个应用程序池创建另一个网站。
-
您接受的答案只是修复的一部分。是的,它将解决当前问题,但您需要调整您的 asp.net 安装的性能。您需要根据服务器中的 CPU 数量配置 maxconnections 和其他线程级别设置。我认为您应该首先更改您的 machine.config 否则您将在生产中遇到性能问题。
-
@Nabheet Sandhu 感谢您的 cmets。我查看了machine.config文件,里面有
<processModel autoConfig="true"/>的设置。互联网上的其他一些人建议使用autoconfig=true,已经设置了好的设置。对吗? -
我实际上并不了解自动配置,因为自 .net 1.1 天以来我一直在手动设置这些值。在某些特殊情况下,此自动配置可能需要进行一些调整。但这些价值观对你和我都有效!!!!谢谢你。它有助于与其他人交谈,这样人们就可以跳出框框思考。
标签: c# asp.net sql-server-2005 iis-6 windows-server-2003