![](/img/trans.png)
[英]How to to keep non-serializable objects during ASP.Net web service reinstall?
[英]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.