C# 减少MVC网站中的数据库调用数量

C# 减少MVC网站中的数据库调用数量,c#,asp.net-mvc-4,dapper,C#,Asp.net Mvc 4,Dapper,我有一个连接到多个数据库的复杂的MVC4网站。每个请求都经过以下步骤 检查用户是否已登录并从身份验证cookie获取用户名。 查询查找数据库以确定客户端数据库的位置并获取其连接字符串。我们为每个客户端维护不同的数据库。 连接到客户端数据库并运行查询以获取用户的详细信息ID、电话号码、首选项等。 根据请求执行选择/更新/删除或插入。 除上述步骤外,我们还有各种操作过滤器,用于查询数据库和检查角色等。这些操作过滤器必须执行步骤1、2、3和4以获取用户信息。我现在发现应用程序运行缓慢,因为它需要执行的

我有一个连接到多个数据库的复杂的MVC4网站。每个请求都经过以下步骤

检查用户是否已登录并从身份验证cookie获取用户名。 查询查找数据库以确定客户端数据库的位置并获取其连接字符串。我们为每个客户端维护不同的数据库。 连接到客户端数据库并运行查询以获取用户的详细信息ID、电话号码、首选项等。 根据请求执行选择/更新/删除或插入。 除上述步骤外,我们还有各种操作过滤器,用于查询数据库和检查角色等。这些操作过滤器必须执行步骤1、2、3和4以获取用户信息。我现在发现应用程序运行缓慢,因为它需要执行的查询数量太多。通过在会话中缓存连接字符串和用户详细信息,我可以极大地提高速度

我们将很快将网站移动到服务器场,我不想依赖会话进行缓存。是否还有其他明显的设计选择是我忽略的,还是我必须继续以memcached的形式使用缓存,或者使用跨服务器场工作的解决方案

编辑:
我应该提到,数据库和网站位于不同的服务器上,有时数据库调用必须通过WAN进行,具体取决于客户端的位置。我已经测量了性能,并且知道数据库调用是性能差的原因。

您是否考虑过将客户机id存储在身份验证cookie中,然后保留服务器端缓存[ClientId->ConnectionString]?

您可以在第一步之后生成和验证cookie,并将数据保存在会话或cookie中。稍后,您可以使用以前存储的cookie/会话中的数据并跳过步骤1

您可以尝试使用群集索引更快地获取数据

您可以尝试在此处使用HttpCookie和AuthenticationCookie来维护您将通过视图和控制器访问的冗余数据的状态。我想说的一个简单示例是维护已登录用户的userId和userName的状态。这是您可以用作参考的内容:

private void SetCookie(string userName, long userId)
{
   string IdUser = Common.Encrypt(userId.ToString());
   FormsAuthentication.SetAuthCookie(userName, false);
   HttpCookie uCookie = new HttpCookie("UserId", IdUser);
   Response.Cookies.Add(uCookie);
}
这只是一个示例代码,演示如何生成cookie。在cookie中设置信息后,您不必每次需要该ID、姓名、电话号码或其他任何信息时都访问数据库。您只需从您创建的cookie中检索该信息

希望这有帮助