c# - 从数据表(缓存对象)与数据库中搜索项目

标签 c# asp.net

目前我有大量数据存储在数据库中。

这组数据(3000条记录)将被用户频繁检索。

目前我正在使用的方法是:

  1. 从数据库中检索这组记录
  2. 转换成数据表
  3. 存储到缓存对象中
  4. 根据查询从这个缓存对象中搜索结果

    CachePostData.Select(string.Format("Name LIKE '%{0}%'", txtItemName.Text));
    
  5. 将结果绑定(bind)到转发器(每页显示 40 条记录的分页)

但我注意到性能不佳(每个请求大约需要 4 秒)。所以,我想知道有没有更好的方法来做到这一点?或者我应该立即从数据库中检索每个查询的结果?

最佳答案

DataTable.Select 可能不是搜索内存中缓存的最有效方法,但它肯定不会花费 4 秒或类似的时间来搜索 3000 行。

第一步是找出性能瓶颈所在。我敢打赌这与搜索缓存无关,但您可以轻松找到,例如使用类似的代码:

var stopwatch = Stopwatch.StartNew();
var result = CachePostData.Select(string.Format("Name LIKE '%{0}%'", txtItemName.Text));

WriteToLog("Read from cache took {0} ms", stopwatch.Elapsed.TotalMilliseconds);

WriteToLog 跟踪某处(例如 System.Diagnostics.Trace、System.Diagnostics.Debug 或日志框架,如 log4net)。

如果您正在寻找缓存的替代方案,您可以简单地缓存实体对象的通用列表,然后使用 Linq 搜索该列表:

var result = CachePostData.Select(x => x.Name.Contains(txtItemName.Text));

这可能稍微更有效(例如,它不需要解析“NAME LIKE ...”过滤器表达式),但同样,我不认为这是你的瓶颈。

关于c# - 从数据表(缓存对象)与数据库中搜索项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607237/

相关文章:

c# - 扩展 SqlException 并向其添加属性

c# - 如何从按钮中删除禁用属性?

css - 在 asp.net 中跨多个页面打印具有许多列标题的 Datagrid 表

c# - 如何以编程方式检查 Windows 更新的适用性规则?

c# - WPF - 如何通过绑定(bind)停止计时器

c# - 如何在 C# 中将 GUID 转换为字符串?

ASP.NET ObjectDataSource SelectParameters CookieParameter 问题

c# - linq where 包含列表中的所有项目

ASP.NET MS11-100 : how can I change the limit on the maximum number of posted form values?

asp.net - 当目标版本为 3.5 时,图表控件可以在 VS 2010 中使用吗?