ASP.NET 会话管理 DeleteExpiredSessions 看起来很傻?

ASP.NET Session Management DeleteExpiredSessions Looks silly?

我有一个使用 Cursor 并将数据存储到临时表中的 DeleteExpiredSessions 版本(由 Microsoft 提供)。 You can find it here

这是存储过程的源代码

CREATE PROCEDURE [dbo].[DeleteExpiredSessions]
AS
    SET NOCOUNT ON
    SET DEADLOCK_PRIORITY LOW 

    DECLARE @now datetime
    SET @now = GETUTCDATE() 

    CREATE TABLE #tblExpiredSessions 
    ( 
        SessionID nvarchar(88) NOT NULL PRIMARY KEY
    )

    INSERT #tblExpiredSessions (SessionID)
        SELECT SessionID
        FROM dbo.ASPStateTempSessions WITH (READUNCOMMITTED)
        WHERE Expires < @now

    IF @@ROWCOUNT <> 0 
    BEGIN 
        DECLARE ExpiredSessionCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY
        FOR SELECT SessionID FROM #tblExpiredSessions 

        DECLARE @SessionID nvarchar(88)

        OPEN ExpiredSessionCursor

        FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID

        WHILE @@FETCH_STATUS = 0 
            BEGIN
                DELETE FROM dbo.ASPStateTempSessions WHERE SessionID = @SessionID AND Expires < @now
                FETCH NEXT FROM ExpiredSessionCursor INTO @SessionID
            END

        CLOSE ExpiredSessionCursor

        DEALLOCATE ExpiredSessionCursor

    END 

    DROP TABLE #tblExpiredSessions

RETURN 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

我想知道为什么它不使用以下查询简单地删除过期会话:

DELETE [ASPState].dbo.ASPStateTempSessions
WHERE Expires < GETUTCDATE()

查看代码并考虑潜在的数据库负载和数据量,我认为这样做的原因是为了防止清理脚本导致可能升级和干扰应用程序的锁。会话 table 将位于每个 Web 请求的关键路径上。