Cache的Insert 和Add 方法引發的血案

2021-07-11 03:46:17 字數 1354 閱讀 6049

開始測試資料庫是否正常。自己寫了和crash頁面相同功能的操作,實驗多次,發現不是資料庫問題。那麼應該是**問題了。不過沒有原始碼啊沒有原始碼。沒有辦法只有反對編譯,使用ilspy 反編譯**。

看源**好像沒有什麼問題啊,很簡單,就是獲取引數,然後塞入資料庫。

沒法子,把源**拷貝出來,直接放在aspx執行,還是crash,把懷疑的注釋掉,終於在我注釋掉乙個

lib.second.tags.addtaglisttocache(this.siteid);

後iis的日誌裡面再也沒有crash了。再反編譯這個方法其實是呼叫了乙個cache類,再反編譯:

「` public class newscache

set }

public static cache getnewscache }

static newscache()

else}}

public void addobject(string objid, object o)

}else}}

}public void onremove(string key, object val, cacheitemremovedreason reason)

case 2:

case 3:}}

public void removeobject(string objid)

}public object retrieveobject(string objid)

else

return result;

}}值得注意的是這個cache類insert的時候傳入的乙個回掉事件,在回掉事件裡面又把cache的資料賽進去了,大概是想這個cache永遠不過期吧。

是的這個類addobject 方法如果你多次叫用之後iis就會掛掉,onremove 會不挺的被呼叫。換句說就是對於cache來說如果你多次呼叫insert方法,而且insert後面有回掉事件的話,這個事件就會被執行。之前的程式設計師在onremove 裡面又insert了一次,於是這個onremove 就死迴圈了。奇怪的是這個問題在iis 6上並不會發生或者說在win 2003 server的iis 6 的.net 2.0 上並不會發生。在iis 7 或者 7.5 的 .net 2.0 上會發生。

當然解決的辦法是把insert換成add,或者在insert的時候判斷一次這個cache是否為null。

最後:

ilspy真是個好東西,反編譯很棒,還免費的

aspx檔案去掉 page language=」c#」 codebehind=」youclass.aspx.cs」 youclass就可以把**寫到aspx檔案裡面動態編譯,沒有源**,只要不太複製也可以搞定。

session cookie和cache的區別

其中cookie是儲存在客戶端的一組資料,主要用來儲存使用者名稱等個人資訊。session session用來儲存每乙個使用者的專有資訊 session的生存期是使用者持續請求時間加上一段時間 一般是20分鐘左右 session資訊是儲存在web伺服器記憶體中的,儲存資料量可大可小 由於使用者停止使...

map的insert和 的區別

遇到一些bug,檢查 似乎沒有問題,執行,出錯。仔細檢查,發現針對map變數,插入時候使用了find與insert。但是之前有個查詢函式中卻直接呼叫過載符去判斷second變數是否為空。針對map而言,insert和還是有一些差別。使用find查詢,未找到返回空迭代器。使用,則一定給程式返回乙個結果...

Cache和Buffer的區別

1.cache 快取區,是快取記憶體,是位於cpu和主記憶體之間的容量較小但速度很快的儲存器,因為cpu的速度遠遠高於主記憶體的速度,cpu從記憶體中讀取資料需等待很長的時間,而 cache儲存著cpu剛用過的資料或迴圈使用的部分資料,這時從cache中讀取資料會更快,減少了cpu等待的時間,提高了...