【发布时间】:2021-07-25 22:57:51
【问题描述】:
我有大量学生的考试数据,我对其进行处理以显示学生成绩。虽然它似乎有效,但显示结果需要更长的时间。时间每天都在增加。
- 我有一个问题表 (tblQuestions) 来存储问题和正确答案。
- 我有一个测试实例表 (tblTestInstance),它存储学生给出的每个测试的测试实例。
- 我拥有的最大表是 tblTestDetails,它存储问题 ID 和学生选择的选项。
我将 GridView 与学生表绑定,并在 GridView 的 Databound 事件中,为每个学生计算学生尝试的每个问题的正确答案。我在数据表中计算数据。
问题是:处理结果需要几分钟。
需要的建议:我想逐行绑定gridview(每行都准备好单个结果),而不是一次加载所有计算结果。
我尝试过的:我使用了带有计时器控制的更新面板。每隔几秒钟,我尝试重新加载我的数据表,但它仍然会一起显示结果。
请有任何建议。我正在使用 ASP.NET Web 窗体。
编辑: 我想逐行显示结果。我的意思是当第一行准备好时,它应该显示在用户的屏幕上。这不会提高我所知道的性能,但我希望用户在屏幕上看到一些东西,而不是等待所有行都准备好。
例如,如果一个班级有 1000 名学生,并且每个学生都进行了包含 150 个或更多问题的测试,那么评估答案需要更长的时间。
我目前使用的方法 我从数据库中拉出学生,并绑定网格视图 对于每个学生,我拉测试实例,然后设置问题 对于每个问题,我使用问题表评估答案 计算分数后,我会显示它们。
【问题讨论】:
-
我看不到在这里逐行处理将如何提高速度 - 在几乎所有情况下,逐行处理比使用数据引擎和使用 sql 查询提取数据要慢得多。我的意思是,用户无法查看或查看超过 1 页的数据 - 你在这里拉了多少行?一页数据应该立即出现-即使对于毛球超级丑陋的sql-这样的页面也会立即出现。这里的一些细节没有意义。我的意思是这里提取了多少行数据?我的意思是世界上最糟糕的 sql 的 100 行仍然会在一秒钟内发生。
-
关于数据项绑定实际上是逐行处理。缺少一些重要的细节。逐行处理或使用数据绑定的项目相当于同一件事。这里的数据量应该无关紧要 - 但重要的是您执行的单独 sql 查询的数量 - 成本很高 - 通常在大多数情况下,大量单独的 sql 查询比被提取的数据量要昂贵得多.这表明在数据绑定事件中执行了太多“新”的从头开始的 sql 查询。一次将数据拉入数据表并将其持久化以用于数据绑定事件。
-
正在执行的 SQL 查询不多。概括地说,我正在使用 SELECT 拉学生。对于每个学生,我都在获取问题集。然后使用 db 表针对正确答案评估每个问题。如果一个班级有 1000 名学生,他们每个人都进行了 150 个问题的测试,那么数据绑定事件将产生较慢的结果。我想要的不是一起等待结果,而是一个一个的方法会更有帮助。用户至少会在 10 分钟内看到一些东西而不是空白页。
-
也许更好地将 sql 例程与答案进行匹配会有所帮助?也许视图中的一组子查询可以进行这种匹配?我想您可以显示学生,然后选择一行进行深入研究。我仍然认为每个学生 150 次匹配不会成为问题,除非 sql 查询无法匹配 Q 和 A,并且此处正在逐行处理。如果这些问题+答案匹配不能用sql完成,那么这将很慢。
-
总结@AlbertD.Kallal,如果可能的话,您应该使用存储过程或类似方法进行一次,并且只进行一次数据库调用。如果您正在为返回的每个初始行执行后续调用数据库,难怪这需要几分钟。