有几件事你可以做,而不干扰用户的工作流程或采取一个巨大的性能冲击。
现在我的敷贴要花大约
30到50 MB的内存。公平吗?
对于.NET应用程序来说,这是正常的。启动应用程序后,您将直接注意到内存占用并不大。
或者我应该在
改为数据库?[但我不能
速度妥协]
只有在第一步无法加载数据时,才能重复查询数据库。每当用户键入框中时,您希望确保不会在每次更改搜索条件时查询数据库,而是在其中有一个短计时器,该计时器在使用新条件查询数据库之前等待一秒钟左右。当请求数据库时,当用户开始滚动时,它还可以帮助减少通过分页或延迟加载剩余数据显示的记录数。正确的数据库索引将帮助您显著降低此类查询的执行速度。
但是,如果您可以将整个列表保存在内存中(比如说它不太大,一步就无法从数据库中查询它,或者您无论如何都需要向用户显示整个列表),那么最好保留列表的原始副本,并拥有可以递增筛选的列表副本。因此,您需要检查您的搜索条件是否是先前搜索条件的子集。如果是这样,您可以过滤已经过滤的列表,否则您需要过滤原始列表。这可以使用LINQ有效地实现
.Where()
操作员,必要时使用plinq进行parralelize。
。其中()
展品O(N)时间阿法克。
这可以通过使用具有适当密钥的哈希集来改进。