DataTable.Select
可能不是搜索内存缓存的最有效方法,但搜索 3000 行肯定不应该花费 4 秒或任何类似的时间。
第一步是找出你的性能瓶颈在哪里。我打赌这与搜索缓存无关,但您可以轻松找到,例如使用类似以下的代码:
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 ...”过滤器表达式),但同样,我不认为这是你的瓶颈。