我有一個函數getWords(int wrNum)
這個函數從數據庫中使用實體框架返回wrNum數的隨機數,當wrNum是300時,這個函數需要10秒鐘的時間。我不明白爲什麼需要這麼多時間。請幫我的代碼有什麼問題?Asp.Net MVC我的代碼出了什麼問題?
public List<string> getWords(int wrNum)
{
IDVLTest d3 = new DVLTest();
for (int i = 0; i < wrNum;i++)
{
string word = d3.getRandomWord().Text;
Words.Add(new WordView { Word = word, Status = WordStatus.Right });
}
return Words.Select(w=>w.Word).ToList();
}
public class DVLTest:IDVLTest
{
...
public Word getRandomWord()
{
Random r = new Random();
int i = r.Next(DVL_Entitie.Words.Count());
return DVL_Entitie.Words.ToList().ElementAt(i);
}
...
}
你試過沒有每次時創建一個新的隨機對象調用getRandomWord?只需要在DVLTest的構造函數中創建一個Random對象,並在getRandomWord中只調用r.Next()。這裏的文檔https://msdn.microsoft.com/en-us/library/ctssatww(v=vs.110).aspx說:「另一種選擇是實例化一個單獨的隨機對象,用於生成所有隨機數因爲實例化一個隨機數生成器相當昂貴,所以這會產生稍好的性能。「 – ADyson
而且您還可以從數據庫中檢索整個列表300次。檢索一次,然後重複使用它。 – ADyson
是的,當我編輯代碼igor說如何從數據庫中得到300個相同的單詞:D謝謝;) – DVL