首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleMembership查询性能

SimpleMembership查询性能
EN

Stack Overflow用户
提问于 2013-08-11 11:14:27
回答 2查看 157关注 0票数 2

我已经创建了一个ASP.NET MVC 4互联网应用程序项目。这个项目使用SimpleMembership。要注册一个帐户,它会运行9个查询。这似乎是正常的,因为这是随项目而来的标准代码,但是9个查询不只是为了注册一个帐户吗?

我还注意到,当我使用:

代码语言:javascript
复制
if (Roles.IsUserInRole("..."))

它运行4个查询..。

这是否正常,这是否会成为一个性能问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-11 14:57:57

这很正常。但这可能是一个性能问题,当你的网站增长。

权限并不会在用户生命周期内发生很大变化。绝大多数用户将拥有默认的权限集,并且只有一个(相对)较少的用户拥有“管理员”或“版主”之类的角色。当您的站点变得很大时,查询数据库的权限将变得非常昂贵,特别是因为您一次又一次地查询相同的数据。每次呈现页面时,您可能都会检查是否有某种权限。用户是否拥有查看“删除”按钮的权限?他能看到一些管理菜单吗?如果是论坛或者博客,他能看到海报的IP地址吗?这类事情要求您在每个页面呈现中多次检查权限,而且您真的不希望通过DB查询进行检查。

正确的解决方案是缓存权限。考虑到这一点:

当用户登录时,您将查询他拥有的所有权限,并将其缓存在web服务器的内存中。如果您有多个web服务器,则需要同步它们的缓存,或者让每个服务器查询用户的权限,如果该特定服务器没有该用户的内存。当用户向该服务器发出请求时,就会发生这种情况。

现在,您根本不需要查询DB。所有的权限检查都是在内存中完成的,这将使您的数据库运行得更快,并且不会影响您的数据库。当然,如果更改用户的权限,则需要同步所有web服务器缓存,但由于很少发生这种情况,因此不会对性能产生任何影响。

您可能希望在某个时候清除缓存,您的服务器有多少RAM是有限制的。在这个阶段,您可以删除最近一次活动的用户的缓存权限,并且可能不再浏览您的站点。即使它们仍然存在,它们的权限也将在下一个查询中重新加载。

票数 1
EN

Stack Overflow用户

发布于 2013-08-11 11:24:01

是啊,一切都很正常。事实上,用户注册并不会过多地影响性能。

然而,Roles.IsUserInRole("...")和其他类似的方法,可以多次调用,因此是一个性能问题。

如果您有一个具有多个并发用户的网站,也许您应该考虑执行您自己的自定义角色检查查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18171327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档