我收到了一些与代码块相关的非常愚蠢的错误,我知道这些代码块绝对可以在自行清理后进行清理。
本质上,我有一个 N 层应用程序框架,它调用“数据提供者”,而“数据提供者”又与 SQl 数据库对话。
我想对数据提供者说“显示所有已使用但尚未处置的连接”,这样我就可以在需要时“强制处置”任何不应打开的连接。
如果我不能在 C# 中执行此操作,Sql 服务器上是否有其他替代方案可以让我深入了解正在发生的情况?
编辑:
在这个实例中,代码是从应用程序中的任何位置调用的,该应用程序基于调用 API 层中单个位置的业务对象实例。 API 层公开一个调用方法的接口(interface)。
我希望让实现接口(interface)的对象或 API 层查看调用堆栈并决定等待、抛出异常或进行调用(打开一个新连接)。
我发现的问题是,我有一个像“人”这样的业务对象,它有一个名为“车辆”的属性,并且是一个车辆类型的对象,其中包含一个名为“所有者”的属性,这当然指回了父对象。
现在,由于我的编码错误,系统进入了一种循环,在 2 个对象的嵌套实例之后创建嵌套实例。
所以修复非常简单......至少在 2 个级别中的 1 个级别上进行延迟加载,或者完全删除循环引用。
但是,我仍然想在运行时查看我的调用堆栈并提出问题......如果我尝试创建此业务对象的实例,这会导致问题吗?
这让我开始思考缓存(稍后将在 API 层中实现)...如果它到位,连接过多的问题就会消失,但会被更大的“我要咀嚼”所取代所有你的内存”问题。
所以我开始思考...为什么我不能分析调用堆栈?
答案...
如果我写出好的代码,我就不必这样做......但我仍然想:)
最佳答案
不了解 C#,但在 Sql Server 中您可以使用该查询来监视打开的连接:
1.获取数据库列表和连接数
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
2.获取用户的所有连接 - sp_who 'userName'
3.获取连接信息DBCC INPUTBUFFER(1)
关于C# sql 实例化,是否可以列出对象实例上下文中未释放的所有 sql 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258729/