簡體   English   中英

當其中存在不可序列化的對象時,如何找出ASP.NET會話的大小?

[英]How to find out size of ASP.NET session, when there are non-serializable objects in it?

我感覺我在ASP.NET會話中放入了很多數據,但是我不知道有多少以及是否應該關注。 我發現了一個類似的問題 ,但這依賴於序列化對象並檢查其序列化大小。 就我而言,會話中的大多數數據都來自另一個庫中的對象,該庫的類未標記為“可序列化”。 (我知道這限制了我使用InProc會話狀態提供程序,但這是另一個問題)。 有人對如何遍歷對象圖並找出其大小有想法嗎?

補充:好的,一種方法是手動遍歷對象圖和使用Marshal.SizeOf()方法。 但這要花費很多時間。 是否可能有一種更簡單的方法來達到相同的效果? 我的目標不是字節精度,而是對數量級感興趣(千字節,兆字節,數十兆...)

為了進行測試,您可以將一個存根定制會話提供程序放在一起,以實現SessionStateStoreProviderBase抽象類。 我將編寫支持將所有內容存儲在WebCache中的后備字段(以便管理會話數據),並在調用SetAndReleaseItemExclusive方法時最終使用Marshal.SizeOf()方法生成統計信息。

        public override void SetAndReleaseItemExclusive(HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem)
        {

        double MemSize = 0;
        foreach (object sessObj in item.Items)
        {
            MemSize += Marshal.SizeOf(sessObj);
        }

}

有關獲取字段大小的更多信息,請咨詢此問題: 使用C#獲取字段的大小(以字節為單位)

您無法生成堆轉儲並從中找到會話的大小。 在java領域中,我可以轉儲堆,然后在mat中將其打開,找到會話對象並找出子圖的大小。

您可能可以將會話狀態信息存儲在數據庫中並檢查大小,但是我不確定是否有工具可以查看和遍歷對象圖。

如果可能,請再檢查一次設計,以查看是否可以最小化會話中的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM