gpt4 book ai didi

c# - 这段代码会杀死我的服务器吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:36 24 4
gpt4 key购买 nike

我的网站一直存在问题,它基本上会超时并死掉。我现在已经到了必须将应用程序池设置为每 5 分钟自动回收一次的地步,但即使这样也失败了,因为我刚下类回来,我的电子邮件收件箱里装满了 4000 封相同的电子邮件错误。

System.Data.SqlClient.SqlException:超时已过。操作完成前超时时间已过或服务器未响应。

今天早上我尝试了一个测试,我在连接字符串上禁用了池,这也没有用。

现在我在想,也许这不是连接泄漏的问题,我之前经历过所有这些,我认为这可能与我网站的核心静态属性有关

这是其中之一

public static List<Member> AllMembers
{
get
{
if (HttpRuntime.Cache["Members"] != null)
{
return (List<Member>)HttpRuntime.Cache["Members"];
}
else
{
GetAllMembers();
return (List<Member>)HttpRuntime.Cache["Members"];
}
}
}

每当我想要一个成员列表时都会调用它,你可以看到,如果它是空的,它会填充缓存,这将使用数据库,如果它不为空,那么它会返回缓存对象。我也有 SQLCacheDependancy,它将清除这些缓存对象,以便再次填充它们。所以这个属性被称为 ALOT。

现在这是一个网络应用程序,随着我的流量一直在增加,

我的属性(property)可能是原因吗?

非常感谢任何帮助

真实

最佳答案

假设您正确处理了所有内容,我有另一种解释:

如果缓存为空/过期并且多个页面尝试同时调用 AllMembers,那么每个页面最终可能会同时调用 GetAllMembers(),从而减慢速度下数据库查询。如果调用开始超时,这可能会开始一个恶性循环。

您可以在您的代码周围放置一个,这样每个属性只能进行一个数据库查询。以下是我的设置方式:

private static object _allMembersLock = new object();
public static List<Member> AllMembers
{
get
{
lock (_allMembersLock)
{
List<Member> members = (List<Member>)HttpRuntime.Cache["Members"];
if (members == null)
{
members = GetAllMembers();
HttpRuntime.Cache["Members"] = members;
}
return members;
}
}
}

关于c# - 这段代码会杀死我的服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3961745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com