我正在构建的窗口应用程序适用于非常低端的机器(Celeron最大128 RAM)。从以下两种方法中哪一种是最好的(我不希望该应用程序成为低端机器的内存耗费): -
方法一: -
查询数据库Select GUID from Table1 where DateTime <= @givendate
,它返回了超过300,000条记录(但只有一个字段,即GUID - 300,000个GUID)。现在运行一个循环来实现基于GUID的该软件的下一个过程。
第二种方法: -
一次又一次地用前1个查询数据库Select Top 1 GUID from Table1 where DateTime <= @givendate
,直到完成所有30万条记录。它一次只返回一个GUID,我可以进行下一步操作。
你有什么建议哪种方法会使用较少的内存资源? (速度/性能不是问题)。
PS:数据库也在本地机器上(MSDE或2005快递版)
答案 0 :(得分:2)
我会采用混合方法。我会一次选择50条记录而不是一条。这样,您不会加载整个记录数,但是您也大大减少了对数据库的调用次数。
答案 1 :(得分:0)
如果你只有128 MB的ram我认为2号将是你最好的方法......那说你不能用存储过程做这个SET based
,这样所有的处理将在服务器上发生
答案 2 :(得分:0)
如果考虑使用内存,我会考虑在本地将数据缓存到磁盘。然后,您可以使用FileStream
对象从文件中读取数据。
你的2号解决方案会非常慢,并且会给数据库服务器带来很多负担。
答案 3 :(得分:0)
我会启用分页启用存储过程。
我会在1k行的大块中进行测试并从那里开始测试,直到我获得最佳性能。
usp_GetGUIDS @from = 1, @to = 1000
答案 4 :(得分:0)
使用方法1并使用SQLDataReader
迭代数据而不会占用内存。
答案 5 :(得分:0)
对于您来说,这可能是一种完全不合理的方法,但如果您担心性能而机器规格较低,我会尝试以下方法: