【发布时间】:2017-04-21 22:21:14
【问题描述】:
我想创建一个由业务层和存储库层组成的 N 层应用程序,用于处理 SQL 数据库以外的数据源,例如,如果我想实现一个存储库以从文本文件或 XML 文件中读取数据并查询包含'C#'的行数或计算平均分数等
似乎如果用户每次想要查询文本文件中的数据时都从 UI 调用调用,那么对于大文件来说效率不高,因为它每次都会通过层调用存储库,并且需要将所有数据加载到内存中,然后每次查询,然后再将其重新显示给用户 - 有没有一种方法可以一次加载所有数据,然后允许对其执行多个查询,或者必须这样做每次查询前都加载到内存中?
是否有任何有效的方法可以为非 SQL 数据库数据源进行 N 层设计,而不必每次都将大量数据/文本文件加载到内存中?
【问题讨论】:
-
听起来你只需要在你的存储库中实现缓存。就像,从文本文件中读取数据,将其存储在变量中(即,在内存中),然后从该变量中读取(如果存在)。如果您知道文件已更改,您可能希望有一些更新变量的方法。但坦率地说,这个问题有点宽泛。有无数种方法可以按照您所询问的方式实现 n 层设计。
-
使用缓存(.Net 4.0 以上的内存缓存)并通过后台进程刷新缓存。而且您的查询将从内存缓存中运行。
-
@MikeMcCaughan 和 loneshark 感谢您的 cmets。听起来我需要缓存从文本文件返回的数据。我是否需要将文本文件的全部内容加载到存储库类中的可缓存对象/属性中?我不明白它是如何在多个事务中存储和重复使用的。
-
@loneshark99 根据您的建议,我已使用 MemoryCache。如果您将其添加为答案,我可以将其标记为答案。谢谢。
-
@Theomax 好的,很高兴它有帮助。
标签: c# repository-pattern