.net在线考试系统服务器端数据缓存怎么做?

lanhai96 2020-02-12 04:38:40
用.net开发在线考试系统,遇到一个性能问题:前台使用Gridview控件绑定sql控件来调取试题内容,但当几百人同时考试的时候,有人会显示不出下一题内容。 我考虑是不是频繁调用数据库造成的,所以考虑在服务器端直接缓存生成的试题数据,然后前台直接调用就行;还有一个方法就是在前台直接调用所有试题,然后缓存在客户端,用户直接调用本地缓存就行! 有没有人做过?具体这两个方法怎么实现啊???求高手给指点一下!
...全文
675 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanhai96 2020-03-12
  • 打赏
  • 举报
回复
Cache技术完美解决,谢谢大家
poletiny 2020-02-28
  • 打赏
  • 举报
回复
可以查阅一下本地存储 localstorage的用法,感觉这个应该可以实现,不过是在前台JS来写。
鲨鱼无间 2020-02-26
  • 打赏
  • 举报
回复
我是一次性读出试题,缓存到客户端,然后操作。客户端只需要保持时间同步以及判断是否结束考试,最后将答案一次性提交。
吉普赛的歌 2020-02-18
  • 打赏
  • 举报
回复
用缓存虽然解决了你当前的问题,但如 #1 版主所说,你这个可能本身的代码有问题,这次避开了,下次还是会遇到
吉普赛的歌 2020-02-18
  • 打赏
  • 举报
回复
要不, 你直接把你的 DBHelper 贴出来, 让大家看下吧, 这样解决问题就快了
吉普赛的歌 2020-02-18
  • 打赏
  • 举报
回复
静态 DBHelper 也没关系, 主要是连接每次必须是新生成的,不能共用一个静态连接,否则并发时会有问题。
正怒月神 版主 2020-02-18
  • 打赏
  • 举报
回复
引用 12 楼 lanhai96 的回复:
[quote=引用 10 楼 正怒月神 的回复:] [quote=引用 3 楼 lanhai96 的回复:] [quote=引用 2 楼 正怒月神 的回复:] 用jmeter设置100个线程,测试一下。 看看是什么问题。 我个人感觉可以不用缓存。 你是不是用了 静态的dbhelper类?
是的,用的静态的类,这个有影响吗?[/quote] 恩,dbhelper不要使用静态类。 [/quote] 那应该使用 dbhelper 动态类?动态类是什么啊?没搞懂 [/quote] 就是,你使用的dbhelper类,是不是 static class
芋头同学 2020-02-17
  • 打赏
  • 举报
回复
用redis去做缓存
  • 打赏
  • 举报
回复
如果你还来得及,给你个忠告,用最近8、9年的流行的前端技术重新开发。
lanhai96 2020-02-16
  • 打赏
  • 举报
回复
引用 10 楼 正怒月神 的回复:
[quote=引用 3 楼 lanhai96 的回复:] [quote=引用 2 楼 正怒月神 的回复:] 用jmeter设置100个线程,测试一下。 看看是什么问题。 我个人感觉可以不用缓存。 你是不是用了 静态的dbhelper类?
是的,用的静态的类,这个有影响吗?[/quote] 恩,dbhelper不要使用静态类。 [/quote] 那应该使用 dbhelper 动态类?动态类是什么啊?没搞懂
lanhai96 2020-02-16
  • 打赏
  • 举报
回复
引用 9 楼 头戴三冠 的回复:
[quote=引用 8 楼 lanhai96 的回复:] 你缓存是用什么做的?cache?还是List<>、dictionary<>?
放redis里面的 [/quote] 嗯嗯 我试试
正怒月神 版主 2020-02-14
  • 打赏
  • 举报
回复
引用 3 楼 lanhai96 的回复:
[quote=引用 2 楼 正怒月神 的回复:] 用jmeter设置100个线程,测试一下。 看看是什么问题。 我个人感觉可以不用缓存。 你是不是用了 静态的dbhelper类?
是的,用的静态的类,这个有影响吗?[/quote] 恩,dbhelper不要使用静态类。
lanhai96 2020-02-13
  • 打赏
  • 举报
回复
引用 5 楼 头戴三冠的回复:
之前做过一个考试系统 我当时的解决方案是这样的 因为题目是固定的 所以就把所有题目拿出来 缓存 在查询前有判断缓存 有缓存就拿缓存 没缓存就加载 然后放到缓存中。 压测的时候跑并发是没什么太大问题。
你缓存是用什么做的?cache?还是List<>、dictionary<>?
lanhai96 2020-02-13
  • 打赏
  • 举报
回复
引用 6 楼 by_封爱的回复:
[quote=引用 4 楼 lanhai96 的回复:] 我用四五台机子试验,就没有问题,上了200人,就有些人获取题的时候,就不显示题目了。数据查询绑定的控件,应该不会有问题,真不知道哪里出问题了。所以只能想到是不是得加个缓存,给指点一下,还有什么可能?
不显示题目是什么问题呢? 是请求失败了 还是挂起了不返回 或者是500内部错误 在查询的地方 做下异常处理 以及看下iis 或者win日志...[/quote] 主要是在客户那里,客户反应如此,我看了IIS,没有错误! 客户拍的视频,就是学生点下一题的时候,就没有试题内容了,但我用四个机子自己试的时候,没有问题,用jmeter压力测试没来得及试验,反复看了代码,逻辑正确,就是绑定了控件!
by_封爱 2020-02-13
  • 打赏
  • 举报
回复
引用 4 楼 lanhai96 的回复:
我用四五台机子试验,就没有问题,上了200人,就有些人获取题的时候,就不显示题目了。数据查询绑定的控件,应该不会有问题,真不知道哪里出问题了。所以只能想到是不是得加个缓存,给指点一下,还有什么可能?
不显示题目是什么问题呢? 是请求失败了 还是挂起了不返回 或者是500内部错误 在查询的地方 做下异常处理 以及看下iis 或者win日志...
极客诗人 2020-02-13
  • 打赏
  • 举报
回复
引用 8 楼 lanhai96 的回复:
你缓存是用什么做的?cache?还是List<>、dictionary<>?
放redis里面的
极客诗人 2020-02-12
  • 打赏
  • 举报
回复
之前做过一个考试系统 我当时的解决方案是这样的 因为题目是固定的 所以就把所有题目拿出来 缓存 在查询前有判断缓存 有缓存就拿缓存 没缓存就加载 然后放到缓存中。 压测的时候跑并发是没什么太大问题。
lanhai96 2020-02-12
  • 打赏
  • 举报
回复
引用 1 楼 by_封爱 的回复:
几百人 就算是一起点"下一题" 也没问题... 所谓的下一题 无非就是查询一条数据.. 如果mssql连几百个人执行一个top1 查询都不支持的话.. 那就砸了吧.. 而且 几百人 并发的几率很小... 你可以复现一下 查看具体的问题 是不是哪地方写错了.. 肯定不是频繁调用数据库的事. 哪怕你没close 依然不会有问题.
我用四五台机子试验,就没有问题,上了200人,就有些人获取题的时候,就不显示题目了。数据查询绑定的控件,应该不会有问题,真不知道哪里出问题了。所以只能想到是不是得加个缓存,给指点一下,还有什么可能?
lanhai96 2020-02-12
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
用jmeter设置100个线程,测试一下。 看看是什么问题。 我个人感觉可以不用缓存。 你是不是用了 静态的dbhelper类?
是的,用的静态的类,这个有影响吗?
正怒月神 版主 2020-02-12
  • 打赏
  • 举报
回复
用jmeter设置100个线程,测试一下。 看看是什么问题。 我个人感觉可以不用缓存。 你是不是用了 静态的dbhelper类?
加载更多回复(1)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧