private static void EnforceMaximumCacheSize() { // remove cache entries if the total cache size is above // MaximumCacheSize int sum = 0; var keys = new List <string>(); foreach (var pair in PreviousRender) { sum += pair.Value.Length; keys.Add(pair.Key); } Debug.WriteLine(string.Format("Memory footprint: {0} bytes in {1} items.", sum, keys.Count)); if (sum <= MaximumCacheSize) { return; } int keyNr = keys.Count * sum / MaximumCacheSize; for (int c = 0; c < keyNr; c++) { PreviousRender.Remove(keys[c]); PreviousRenderTime.Remove(keys[c]); } }
// ReSharper disable UnusedParameter.Local private static void ProcessCommand(HttpContext context, CommandEventArgs cea) // ReSharper restore UnusedParameter.Local { switch (cea.CommandName) { case "ClearUploadPanelCache": { PreviousRender.Remove((string)cea.CommandArgument); } break; } }
/// <summary> /// clear the cached output of child update panels /// </summary> /// <param name="id"></param> private void ClearChildren(string id) { foreach (var pair in PanelTree) { if (pair.Value != id) { continue; } PreviousRender.Remove(Key + ":" + pair.Key); PreviousRenderTime.Remove(Key + ":" + pair.Key); ClearChildren(pair.Key); } }
private static void EnforceMaximumCacheTime() { var keys = new List <string>(); foreach (var pair in PreviousRender) { DateTime dt; if (!PreviousRenderTime.TryGetValue(pair.Key, out dt)) { continue; } if ((DateTime.Now - dt).TotalMilliseconds > MaximumCacheTime) { keys.Add(pair.Key); } } foreach (var key in keys) { PreviousRender.Remove(key); PreviousRenderTime.Remove(key); } }
private void InitFilter() { var session = HttpContext.Current.Session; if (session != null) { if (session.IsNewSession) { session["InitializeSession"] = "Something"; } _sessionID = session.SessionID; } ScriptManager sm = ScriptManager.GetCurrent(Page); if (sm != null) { if (!sm.IsInAsyncPostBack) { if (_sessionID != null) { var keysToRemove = PreviousRender.Keys.Where(key => key.StartsWith(_sessionID + ":")).ToList(); foreach (string key in keysToRemove) { PreviousRender.Remove(key); PreviousRenderTime.Remove(key); } EnsureKey(); } } else { BuildPanelTree(); } LoadApplyPatch(); } ProcessCache(); }
/// <summary> /// try to shrink the update panel output /// </summary> /// <param name="id"></param> /// <param name="content"></param> /// <returns></returns> private string Shrink(string id, string content) { string keyId = Key + ":" + id; string prev; // if the updatepanel content is not cached, cache it and send it bool hasPrevious = PreviousRender.TryGetValue(keyId, out prev); PreviousRender[keyId] = content; PreviousRenderTime[keyId] = DateTime.Now; if (hasPrevious) { // Generate the diff patch content = GeneratePatch(content, prev); } /*// send it through a javascript rather than an updatePanel innerHtml replacement * string s = * string.Format( * "var elem=document.getElementById('{1}'); if (elem) {{ var patch='{0}';ApplyPatch(elem,patch); }}", * JSUtil.fixString(content), id); * s = s.Length + "|scriptBlock|ScriptContentNoTags|" + s + "|"; * return s;*/ return(string.Format("{0}|updatePanel|{1}|{2}|", content.Length, id, content)); }