gpt4 book ai didi

asp.net-mvc-3 - 在带有 Entity Framework 的 asp.net MVC 中,在键入缓慢数据库导致的滞后时进行搜索

转载 作者:行者123 更新时间:2023-12-04 14:38:30 26 4
gpt4 key购买 nike

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

我的 Controller 接受 Searchstring 参数并相应地返回记录。

我所做的是使用此 javascript 将我的 Controller 调用到一个 div 中:

$("#SearchField").keyup(function (event) {
$.ajax({
cache: false,
url: 'FolderList?searchString=' + $("#SearchField").val(),
success: function (data) {
$('#FolderList').empty().html(data);
}
});
});

这是我的 Controller 代码:

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));
}

问题是我在 Controller (文件夹)中请求的数据库实体加载速度非常慢(数据库问题)。它使搜索功能在您键入时滞后很多,并且根本无法使用。这是我无法从源头上解决的问题,我必须处理。

所以我的问题是:有没有一种方法可以将文件夹数据库实体加载到内存中,这样加载页面的时间会很长,但每次调用 Controller 后都会很快。或者我实现这个目标的方式有误吗?还有别的办法吗?

最佳答案

如果文件夹不包含大量数据,则在应用程序启动时加载所有行并将它们存储在缓存中是完全合理的,例如

Cache["folders"] = (from f in folders select f).ToList();

然后,替换

folders = folders.Where(p => p.SearchField.ToLower().Contains(searchString.ToLower()));

folders = Cache["folders"].Where(p => p.SearchField.ToLower().Contains(searchString.ToLower()));

请记住,如果应用程序域回收,缓存将会清空。如果读取所有必要行以填充缓存需要很长时间,您可能需要计划在应用程序域启动/回收时预热缓存。

关于asp.net-mvc-3 - 在带有 Entity Framework 的 asp.net MVC 中,在键入缓慢数据库导致的滞后时进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com