| <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="IGM.master.cs" Inherits="SparqWare.MasterPage.IGM" %> |
| <%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" > |
| <head id="Head1" runat="server"> |
| <title>Untitled Page</title> |
| <link href="../styles.css" rel="stylesheet" type="text/css" /> |
| </head> |
| <body > |
| <script type="text/javascript"> |
| function panelMouseOver(sender, eventArgs) |
| { |
| if (eventArgs.get_item().get_text().indexOf("Folders") != -1 && blnDragging) |
| { |
| var multipage=$find('<%= RadMultiPage1.ClientID %>'); |
| multipage.set_selectedIndex(eventArgs.get_item().get_index()); |
| } |
| } |
| var blnDragging = false; |
| function OnClientItemClicking(sender, eventArgs) { |
| var multipage = $find('<%= RadMultiPage1.ClientID %>'); |
| multipage.set_selectedIndex(eventArgs.get_item().get_index()); |
| } |
| </script> |
| <form id="form2" runat="server"> |
| <telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager> |
| <table cellpadding="0" cellspacing="0"> |
| <tr> |
| <td Width="290px" rowspan="3" style="border-top-style: solid; border-width: 1px; border-color: #666666; border-left-style: solid; border-width: 1px; border-color: #666666" > |
| <SFWeb:Image ID="imgCompany" runat="server" ImageUrl="~/Img/TeeMailer.png" /></td> |
| <td Width="500px" bgcolor="#8CBEFF" style="border-top-style: solid; border-width: 1px; border-color: #666666"></td> |
| <td Width="20%" bgcolor="#8CBEFF" valign="top" |
| style="border-right-style: solid; border-width: 1px; border-color: #666666; border-top-style: solid; border-width: 1px; border-color: #666666; padding-top: 1px; padding-right: 1px;"> |
| <telerik:RadMenu ID="RadMenu1" Runat="server" Skin="Office2007" Width="180px"> |
| <Items> |
| <telerik:RadMenuItem runat="server" Text="Home"> |
| </telerik:RadMenuItem> |
| <telerik:RadMenuItem runat="server" Text="Help"> |
| </telerik:RadMenuItem> |
| <telerik:RadMenuItem runat="server" Text="Logout"> |
| </telerik:RadMenuItem> |
| </Items> |
| </telerik:RadMenu> |
| </td> |
| </tr> |
| <tr> |
| <td bgcolor="#8CBEFF"></td> |
| <td bgcolor="#8CBEFF" style="border-right-style: solid; border-width: 1px; border-color: #666666" width="20%"></td> |
| </tr> |
| <tr> |
| <td bgcolor="#8CBEFF"></td> |
| <td bgcolor="#8CBEFF" style="border-right-style: solid; border-width: 1px; border-color: #666666" width="20%"></td> |
| </tr> |
| </table> |
| <telerik:RadSplitter ID="RadSplitter1" runat="server" |
| LiveResize="True" |
| Width="100%" |
| Height="100%"> |
| <telerik:RadPane ID="RadPane1" runat="server" Width="200px" Height="100%" > |
| <telerik:RadMultiPage ID="RadMultiPage1" runat="server" |
| SelectedIndex="0" |
| Height="100%" |
| Width="198px" |
| BackColor="White" |
| BorderColor="#6593cf" |
| BorderStyle="Solid" |
| BorderWidth="1px"> |
| <telerik:RadPageView ID="RadPageView1" runat="server" Height="100%"> |
| <div class="qsfexHeader">Favourite Folders</div> |
| </telerik:RadPageView> |
| <telerik:RadPageView ID="RadPageView2" runat="server" Height="100%"> |
| <div class="qsfexHeader">All Mail Folders</div> |
| </telerik:RadPageView> |
| <telerik:RadPageView ID="RadPageView3" runat="server" Height="100%"> |
| <div class="qsfexHeader">Calendar</div> |
| </telerik:RadPageView> |
| <telerik:RadPageView ID="RadPageView4" runat="server" Height="100%"> |
| <div class="qsfexHeader">Others</div> |
| </telerik:RadPageView> |
| </telerik:RadMultiPage> |
| <telerik:RadPanelBar ID="RadPanelbar2" runat="server" |
| ExpandMode="SingleExpandedItem" |
| OnClientItemClicking="OnClientItemClicking" |
| OnClientMouseOver="panelMouseOver" |
| Skin="Office2007" |
| Width="200px" |
| Height="100%"> |
| <Items> |
| <telerik:RadPanelItem Text="Favourite Folders" Expanded="True" ></telerik:RadPanelItem> |
| <telerik:RadPanelItem Text="All Mail Folders" ></telerik:RadPanelItem> |
| <telerik:RadPanelItem Text="Calendar" ></telerik:RadPanelItem> |
| <telerik:RadPanelItem Text="Others" ></telerik:RadPanelItem> |
| </Items> |
| </telerik:RadPanelBar> |
| </telerik:RadPane> |
| <telerik:RadSplitBar ID="RadSplitBar1" runat="server" CollapseMode="Forward" Height="100%"/> |
| <telerik:RadPane ID="RadPane2" runat="server" Width="100%" Height="100%" > |
| <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> |
| </asp:ContentPlaceHolder> |
| </telerik:RadPane> |
| </telerik:RadSplitter> |
| </form> |
| </body> |
| </html> |
| protected void btnExport_Click(object sender, System.EventArgs e) | |
| { | |
| dg.MasterTableView.Columns.FindByUniqueName("Delete").Visible = false; | |
| dg.Columns.FindByUniqueName("clName").Visible = false; | |
| dg.Columns.FindByUniqueName("clNamePrint").Visible = true; | |
| foreach (GridItem commandItem in this.dg.MasterTableView.GetItems(GridItemType.FilteringItem)) | |
| { | |
| commandItem.Visible = false; | |
| } | |
| dg.ExportSettings.FileName = Page.Title; | |
| dg.ExportSettings.OpenInNewWindow = true; | |
| dg.ExportSettings.ExportOnlyData = true; | |
| dg.MasterTableView.ExportToExcel(); | |
| } |
We have a few pinned handles here, which are System.Object arrays:
Pinned Handles: 58
I looked at a couple of them to track down their roots, but couldn’t find any. The data in these appear to be something like this:
201cd4d0 6c69462f 20726574 4943432f 61465454 /Filter /CCITTFa
201cd4e0 63654478 2065646f 572f0a0d 68746469 xDecode ../Width
201cd4f0 32373120 2f0a0d38 67696548 32207468 1728../Height 2
201cd500 0d393032 69422f0a 65507374 6d6f4372 209../BitsPerCom
201cd510 656e6f70 3120746e 432f0a0d 726f6c6f ponent 1../Color
201cd520 63617053 442f2065 63697665 61724765 Space /DeviceGra
201cd530 2f0a0d79 676e654c 37206874 52203020 y../Length 7 0 R
201cd540 442f0a0d 646f6365 72615065 3c20736d ../DecodeParms <
Do you or your developers recognize this pattern?
I then looked up the System.Byte[] arrays...There are lots of these objects on the LOH, some as large as 8+ MB...
I traced some of these to PwC.Tobacco.Entities.TobaccoDisputeDocument & PwC.Tobacco.Entities.TobaccoNotice on thread 18. Further investigation shows that the source of these objects which are living long is Telerik.Web.UI.RadGrid, which roots PwC.Tobacco.Entities.TobaccoNotice via session. Session timeout itself isn't all that long - 20 minutes, but because they are in load testing, it appears to me that the process is running into this very quickly. Here’s the root:
ESP:347f2ac:Root: 2a0b61bc(Telerik.Web.UI.RadGrid)->
3c0426e0(ASP.pages_notification_viewpublishmsanotificationlist_aspx)->
5bcc7750(System.Web.HttpContext)->
1e0d21e8(System.Threading.Thread)->
1e0d4edc(System.Runtime.Remoting.Contexts.Context)->
1e0d4d50(System.AppDomain)->
1e11c29c(System.ResolveEventHandler)->
1e11b948(System.Web.Compilation.BuildManager)->
1e11c8b8(System.Web.Compilation.MemoryBuildResultCache)->
1e0e2a04(System.Web.Caching.CacheMultiple)->
1e0e2a1c(System.Object[])->
1e0e5614(System.Web.Caching.CacheSingle)->
1e0e5698(System.Web.Caching.CacheExpires)->
1e0e56b8(System.Object[])->
1e0e5740(System.Web.Caching.ExpiresBucket)->
4b0073d0(System.Web.Caching.ExpiresPage[])->
4b007454(System.Web.Caching.ExpiresEntry[])->
10771788(System.Web.Caching.CacheEntry)->
10771758(System.Web.SessionState.InProcSessionState)->
126649ac(System.Web.SessionState.SessionStateItemCollection)->
12664a0c(System.Collections.Hashtable)->
1316bedc(System.Collections.Hashtable+bucket[])->
1316becc(System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry)->
14acd12c(PwC.Tobacco.Entities.TobaccoNotice)->
Summary:
So there are 2 things that are contributing to the OOM here:
1. Many objects of type PwC.Tobacco.Entities.TobaccoNotice are rooted in session via Telerik.Web.UI.RadGrid
2. Pinned System.Object[] arrays.
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. |
|
I was using a trial version of ‘RadControls for ASPNET’.
Now I have updated to purchased version of ‘RadControls for ASPNET AJAX 2009’.
All controls have upgraded to this version
But now all validation happens only at server side.
(I have used asp required field validator to validate telerik date picker).
But validation happen only at server side when I call page.validate()
it was happening in client side itself before.
what to do now?
| <telerik:radgrid id="RadGrid1" runat="server" skin="Office2007" autogeneratecolumns="false" onneeddatasource="RadGrid1_NeedDataSource" width="350px"> |
| <clientsettings> |
| <scrolling allowscroll="true" scrollheight="150px" usestaticheaders="true" /> |
| </clientsettings> |
| <mastertableview> |
| <columns> |
| <telerik:gridbuttoncolumn datatextfield="link" headertext="Test Header" buttontype="LinkButton" /> |
| </columns> |
| </mastertableview> |
| </telerik:radgrid> |
| protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) { |
| DataTable dt = new DataTable(); |
| dt.Columns.Add("link", typeof(String)); |
| for (int i = 0; i < 50; i++) { |
| DataRow row = dt.NewRow(); |
| row["link"] = "Test Link"; |
| dt.Rows.Add(row); |
| } |
| RadGrid1.DataSource = dt; |
| } |