DVL*_*DVL 3 c# asp.net-mvc entity-framework entity-framework-6
我有一个函数叫做getWords(int wrNum)wich从数据库中使用实体框架返回wrNum数字随机数,当wrNum为300时,这个函数需要花费10秒的时间.我不明白为什么需要这么多时间.请帮助我的代码出了什么问题?
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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
因为您在每次迭代中从数据库中检索整个列表,并且数据库访问通常是昂贵的,因为它发生在进程外并且通常通过网络(数据库和应用程序/进程通常不驻留在同一服务器上).您应该在for循环外部检索列表,然后将检索到的列表getRandomWord作为参数传递给方法.
DVL_Entitie.Words.Count() // offending line
DVL_Entitie.Words.ToList() // offending line
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |