Asp.net mvc 3 使用实体框架的asp.net MVC中,由于数据库速度慢而导致键入时搜索滞后

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:

我正在使用mvc为一个网站实现“键入时搜索”功能

我的控制器接受Searchstring参数并相应地返回记录

我要做的是使用以下javascript将我的控制器调用到div中:

$("#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()));