2009-11-23 61 views
0

讓我從解釋我的場景開始:保存數據庫調用 - 一次顯示一行

我正在開發C#Asp.net中的測驗引擎。有一個選項可以一次顯示一個問題。由於會有很多用戶訪問測驗,我不想爲每個問題進行數據庫調用。理想情況下,我想加載頁面加載時的所有問題,並以某種方式一次顯示一個問題。對於每個問題做

操作:

  1. 問題控制將動態地取決於問題類型來生成。

  2. 每個問題後,我需要保存用戶的迴應。

什麼是通過節省數據庫調用來達到此目的的理想方法?我真的很喜歡一些方向。提前致謝。

+0

嗨初學者,你能給我們一些細節。爲什麼你需要保存數據庫調用?網頁中會緩存多少個問題?這可能是因爲使用數據庫會更好。 – 2009-11-23 08:48:46

+0

測驗引擎只是學習管理系統中的一個模塊。因此,還有其他模塊正在使用。特別是,很多用戶每天都在使用Quiz引擎。這是我想保存數據庫調用的原因。在這種情況下使用Object Datasource是否可行?我可以爲一頁設置1行,並使用事件處理程序創建動態控件,並在用戶轉到下一個問題時保存響應。 – beginner 2009-11-23 10:40:34

回答

0

理想我想加載所有的頁面加載 問題,並在同一時間莫名其妙 顯示一個問題。

這意味着某種緩存。不要使用會話狀態,因爲您無法將其從一個用戶共享到另一個用戶。

您可能想要使用緩存對象。例如,像(從你的代碼背後):

DataSet quiz; 
string quizName = "quiz#1"; 
lock (quizLock) 
{ 
    quiz = (DataSet)this.Cache[quizName]; 
    if (quiz == null) 
    { 
     quiz = DAL.ReadQuiz(quizName); 
     this.Cache.Insert(quizName, quiz); 
    } 
} 
+0

謝謝。使用對象數據庫和分頁(一次可能有一行)是一個好主意?當我點擊下一個問題來保存答案時,我可以遍歷行並創建動態控件,並且還有事件。 – beginner 2009-11-23 10:35:06

+0

這聽起來像是可能是矯枉過正。您可以緩存DataTable(或DataSet),然後使用DataView選擇要顯示的行,並將該DataView綁定到您的顯示控件。 – RickNZ 2009-11-23 23:01:44

1

我的一系列問題同樣是爲所有用戶,那麼你可以考慮使用應用程序的問題和答覆廣高速緩存。爲此,您可以一次性獲得所有問題或第一次提取問題,然後將其緩存。

對於每個用戶的東西,如保存對問題的迴應,您可以使用會話對象。由於您在應用程序範圍的緩存中有問題及其相關選項,因此只能在會話對象中保存問題密鑰和選定選項。

+0

是的,所有用戶的問題都是一樣的,除了會有隨機化的問題。謝謝,我從來沒有使用過緩存。需要檢查出來。 – beginner 2009-11-23 02:30:50

+0

有疑問,當我說問題相同時,這取決於測驗。對於不同的測驗,obviuosly的問題會有所不同。用戶將同時選擇不同的測驗。緩存一個好主意還在嗎? – beginner 2009-11-23 03:05:21

-1

您可以將用戶的問題存儲在會話變量中,但應考慮這會如何影響內存使用情況。通過爲每個用戶存儲大量數據,可用內存將限制應用程序可以處理的用戶數量。

通過從數據庫中獲取的每個問題,每個頁面請求所需時間稍長來處理,但你會轉變,從你可以有多少用戶處理瓶頸給你多少可以每秒處理的網頁。這也是一個較軟的限制,即服務器只需要更長時間才能響應,而不是因爲內存不足而開始丟棄用戶會話。

+0

什麼是downvote?如果你沒有解釋你認爲是錯誤的,那麼它是毫無意義的...... – Guffa 2009-11-23 17:27:28

0

應該比較容易實現使用JavaScript。 你只需抓住所有的問題把它們存儲在本地散列表(簡單的JavaScript對象),然後顯示然後你喜歡。

有一個jQuery Quiz plug in,你可以使用/再利用或只是看和學習一些技巧和竅門(see this page as well)

2

除非你期待在高每秒數百我不會理會交易率。

不成熟的優化會導致真正的問題,只能解決想象中的問題。

現代的DBMS有thier自己的非常高效的緩存mechanisims,所以爲什麼要重新發明輪子?讓您的應用程序簡單明瞭,讓數據庫管理系統處理緩存並在實際擁有時解決任何性能問題。

+0

這就是我所要回答的 - 每個用戶的查詢頻率(除非問題非常微不足道)的頻率越來越高,相當低。一旦你的系統工作ASP.NET和SQL Server之間提供各種緩存機會 – Murph 2009-11-23 09:24:20

相關問題