2011-09-27 17 views
2

我有一個即將發佈的asp.net網站。該網站處理業務管理。我正在做的準備發佈的事情之一是將購買的企業列表中的大量數據上傳到我們的SQL數據庫中。爲此,我使用一個非常簡單的方法:將.csv文件放在服務器上的一個文件夾中,並在臨時頁面上使用Page_Load事件來完成處理數據並將其放入我們的數據庫所需的邏輯。asp.net網站停止響應時,做重查詢

這是一個漫長的過程。業務列表被分解成一大堆文件,並且我在頁面上設置了腳本,以便在每次刷新頁面時從一個文件導入所有數據。每個文件大約需要10分鐘。

奇怪的是:處理此數據時(服務器正在處理所有內容,在page_load方法終止之前),網站被阻止 - 其他用戶無法訪問它,網站上的其他頁面也不會加載。他們卡在「連接...」階段。

現在這不是一個大問題,因爲該網站只是在測試環境中運行。但是,當網站運行時,我可能需要使用類似的腳本來將數據存入數據庫,顯然,當發生這種情況時,不能接受所有阻止的用戶。

我確信這不是SQL Server的問題,因爲我可以在此進程運行時同時執行查詢,因此它必須是Web服務器出錯。

我不能發佈代碼exerpt,因爲它是冗長的囉嗦和技術。然而,沒有什麼困難正在進行:該方法從.csv文件中讀取數據,處理它,併爲文件的每一行向外部服務發出HTTP請求,以收集更多相關數據。然後,將所有數據插入到SQL數據庫中。

據我所知,Web服務器不應該像這樣阻塞。即使一個線程/用戶需要大量資源,他們也應該能夠同時爲許多用戶同時提供頁面。

任何可以提示可能是什麼?我應該從哪裏開始尋找解決方案?

+0

如果您的數據處理與您的網站無關,您可以使用另一個應用程序池創建另一個網站。 – 2GDev

+0

您接受的答案只是修復的一部分。是的,它會解決當前的問題,但你需要調整你的asp.net安裝性能。您需要根據服務器中的CPU數量來配置maxconnections和其他線程級別設置。我認爲你應該先改變你的machine.config,否則你會遇到生產中的性能問題。 – Nabheet

+0

@Nabheet Sandhu感謝您的意見。我查看了machine.config文件,並且設置了'。互聯網上的其他人已經建議,使用'autoconfig = true',好的設置已經設置好了。這是正確的嗎? – Oliver

回答

2

ASP.NET並不適用於大量處理。 ASP.NET頁面應該只是觸發該操作。後臺進程應該完成繁重的工作。兩者都可以使用隊列或類似的東西進行通信。 網頁應該簡單地報告後臺任務的狀態。

這種範例是現代計算(特別是雲計算)的核心。

1

請參考msdn的http://msdn.microsoft.com/en-us/library/ff647787.aspx#scalenetchapt06_topic8

我認爲問題在於,您正在使用asp.net的默認設置,因爲您沒有獲得足夠的線程並且只有兩個出站tcp/ip連接。這對於一個真實的網站來說太糟糕了。

請更改您的machine.config中的maxconnections,maxworkerthreads和其他。有一些像12 * CPU數量等設置的公式。

這應該會給你提升性能所需。

希望這會有所幫助。

編輯: - 之前,我瞭解到在machine.config的自動配置= true設置

我的意見是。我做了一些初步研究,發現這些設置適用於大多數應用程序。因此,這些自定義設置僅適用於可能需要仔細考慮優化的特殊情況。