2014-10-30 35 views
0

我正在開發一個需要從大約500萬條記錄(大約4GB數據)中搜索記錄的asp.net應用程序。客戶正在尋找更高的性能並決定使用內存緩存。但是我在將數據從asp.net上傳到內存緩存時遇到了問題。我試着改變應用程序池設置,並將虛擬內存設置爲0,將私有內存設置爲0 ..沒有任何結果。它正在上傳到1.5GB左右,並拋出內存異常。當我通過在應用程序屬性中的構建設置中取消選中「32位」來使用控制檯應用程序推送數據時,沒有任何問題。 我的問題與asp.net。我使用.net框架工作4.0與4核心服務器,在服務器的可用內存大約49GB。我也嘗試在應用程序池中啓用64位模式下的32位運行。但沒有任何改變。 如果有任何解決方案,請給我建議。內存緩存在Asp.net中的最大限制

+5

你會更好地加快數據庫查詢,而不是想要緩存所有數據。 – 2014-10-30 07:45:58

+2

如何使用全文搜索的東西(我認爲你想要)像Lucene.net? – sisve 2014-10-30 08:21:23

+1

我同意這應該在數據庫中完成。如果您提供您正在使用的查詢來查找記錄和表格架構,我們可以幫助您。 – Magnus 2014-10-30 08:23:39

回答

0

正如John已經提到的那樣:查詢5.000.000記錄是數據庫的工作,而不是您的代碼。如果你正確地配置數據庫(讓數據庫使用內存作爲緩存,正確的索引,性能SQL查詢),我會說以99.9%的機會,數據庫將比在ASP.NET中創建的任何東西都快得多。

無論如何,如果你真的想以相反的方式來做,你需要創建一個64位的進程。
清單做這件事(從我的頭 - 爲了完整性無法保證):

  • 解爲「任何CPU」或「64」
  • 運行IIS在64的編譯(所有部分)位CPU的OS(這應該是49 GB RAM可用的情況下)
  • 設置應用程序池以作爲沒有存儲器極限的64位過程運行:
    • 應用程序池 - >「您的池」 - >高級設置...
      - >啓用32位應用程序 - >錯誤
      - >專用空間限制(KB) - > 0
      - >虛擬內存限制(KB) - > 0
+1

或者可能讓緩存作爲自己的進程運行在IIS之外。 – Magnus 2014-10-30 08:31:35

0

謝謝你們。我同意我可以在我的數據庫中做到這一點。我正在處理每秒大量的請求。我的數據庫查詢是這樣的:select a,b,c,d,e從table1其中id =主鍵...這是非常簡單和高效的查詢..雖然這是高效的..它沒有提供所需的性能。所以我們決定使用緩存。現在我們通過分別創建一個Windows服務(它創建一個代理和主機緩存)和Web應用程序來解決這個問題。網絡應用程序內部調用這個Windows服務..它現在工作。謝謝你的所有建議。