Asp.net mvc 3 使用实体框架的asp.net MVC中,由于数据库速度慢而导致键入时搜索滞后
我正在使用mvc为一个网站实现“键入时搜索”功能 我的控制器接受Searchstring参数并相应地返回记录 我要做的是使用以下javascript将我的控制器调用到div中:Asp.net mvc 3 使用实体框架的asp.net MVC中,由于数据库速度慢而导致键入时搜索滞后,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我正在使用mvc为一个网站实现“键入时搜索”功能 我的控制器接受Searchstring参数并相应地返回记录 我要做的是使用以下javascript将我的控制器调用到div中: $("#SearchField").keyup(function (event) { $.ajax({ cache: false, url: 'FolderList?searchString=' + $("#SearchField").val(), success:
$("#SearchField").keyup(function (event) {
$.ajax({
cache: false,
url: 'FolderList?searchString=' + $("#SearchField").val(),
success: function (data) {
$('#FolderList').empty().html(data);
}
});
});
这是我的控制器代码:
public ActionResult Search(string searchString, int? page)
{
var folders = db.Folders.AsQueryable();
if (!String.IsNullOrEmpty(searchString))
{
folders = folders.Where(p => p.SearchField.ToLower().Contains(searchString.ToLower()));
}
int pageSize = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["FolderPageSize"]);
int pageNumber = (page ?? 1);
return View(folders.ToPagedList(pageNumber, pageSize));
}
问题是我在控制器(文件夹)中请求的数据库实体加载非常慢(数据库问题)。它使你输入时的搜索功能滞后很多,根本不可用。这是一个我无法从源头上解决的问题,我必须解决它
所以我的问题是:有没有一种方法可以在内存中加载文件夹数据库实体,这样加载页面需要很长时间,但是每次调用控制器之后都会很快。还是我在实现这一目标的方式上错了?还有别的办法吗 如果文件夹不包含大量数据,则在应用程序启动时加载所有行并将其存储在缓存中是完全合理的,例如
Cache["folders"] = (from f in folders select f).ToList();
然后,替换
folders = folders.Where(p => p.SearchField.ToLower().Contains(searchString.ToLower()));
与
请记住,如果应用程序域回收,缓存将清空。如果读取所有必需的行以填充缓存需要很长时间,您可能需要计划在应用程序域启动/回收时预热缓存。工作得非常好!谢谢!为了使其工作,我必须在应用程序中指定HttpContext start:HttpContext.Current.Cache[“Folders”]=(从db.Folders中的f选择f).ToList();从控制器中的HttpContext缓存和强制转换为列表获取:(list)HttpContext.cache[“Folders”];IEnumerable folders=文件夹列表;
folders = Cache["folders"].Where(p => p.SearchField.ToLower().Contains(searchString.ToLower()));