Hello techies,
We are using the RagGrid on a test page for performance testing.
We were surprised to notice that a simple page with 100 elements in the GRID takes on an average about 2 seconds. We are doing a load test on Win Server 2008 R2. We are not using a real database. We are using a STUB to generate the 100 odd elements.
The same STUB when used on ASP.net MVC page with simple HTML table rendering out performs the RadGrid Page. The MVC page takes about 0.37 seconds.
Test Environment : ASP.net 4.0 / RadControls for ASP.NET AJAX Q2 2011 SP1 / Windows Server 2008 R2 / IIS 7.5 / Application pool type “Integrated Pipeline”
Any ideas?
Advance thanks,
<telerik:RadComboBox ID="rcbSiteSearch" runat="server" Width="190px" Height="100px" EnableLoadOnDemand="True" ShowMoreResultsBox="true" MarkFirstMatch="true" AllowCustomText="true" EnableVirtualScrolling="true" OnItemsRequested="rcbSiteSearch_ItemsRequested" />Protected Sub rcbSiteSearch_ItemsRequested(ByVal sender As Object, ByVal e As RadComboBoxItemsRequestedEventArgs) Const ItemsPerRequest As Integer = 5 Dim data As DataTable = GetSiteName(e.Text) Dim itemOffset As Integer = e.NumberOfItems Dim endOffset As Integer = Math.Min(itemOffset + ItemsPerRequest, data.Rows.Count) e.EndOfItems = endOffset = data.Rows.Count For i As Integer = itemOffset To endOffset - 1 rcbSiteSearch.Items.Add(New RadComboBoxItem(data.Rows(i)("name").ToString(), data.Rows(i)("value").ToString())) Next e.Message = GetStatusMessage(endOffset, data.Rows.Count) End Sub Private Shared Function GetSiteName(ByVal text As String) As DataTable Dim StateCode As String = "pa" Dim connectionString As String = *Connection String* Dim QueryStr As String = *QUERY* Dim adapter As New SqlDataAdapter(QueryStr,connectionString) Dim Data As New DataTable() Try adapter.Fill(Data) Catch ex As Exception Call MsgBox(String.Format("Unexpected Error: {0}", ex.ToString()), 0, "Unexpected Search Error") End Try Return Data End Function Private Shared Function GetStatusMessage(ByVal offset As Integer, ByVal total As Integer) As String If total <= 0 Then Return "No matches" End If Return [String].Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>", offset, total) End Functionprotected virtual void SetupGridProperties(int pageSize) { _gridObj.Width = Unit.Percentage(97); _gridObj.Height = Unit.Percentage(95); _gridObj.ID = "gridRpt"; _gridObj.Skin = ConfigurationManager.AppSettings.Get("WebGridStyle"); _gridObj.AllowPaging = true; _gridObj.PageSize = pageSize; _gridObj.PagerStyle.Mode = GridPagerMode.NextPrevNumericAndAdvanced; _gridObj.PagerStyle.Position = GridPagerPosition.Top; _gridObj.PagerStyle.AlwaysVisible = false; _gridObj.AllowSorting = true; _gridObj.GridLines = GridLines.Both; _gridObj.AllowMultiRowSelection = false; _gridObj.ClientSettings.AllowColumnsReorder = true; _gridObj.ClientSettings.ColumnsReorderMethod = GridClientSettings.GridColumnsReorderMethod.Reorder; _gridObj.ClientSettings.Selecting.AllowRowSelect = true; _gridObj.ClientSettings.Selecting.CellSelectionMode = GridCellSelectionMode.SingleCell; _gridObj.ClientSettings.Selecting.CellSelectionMode = GridCellSelectionMode.MultiCell; // _gridObj.ClientSettings.Selecting.AllowCellSelect = true; // _gridObj.ClientSettings.Selecting.AllowMultiCellSelect = true; _gridObj.ClientSettings.ClientEvents.OnGridCreated = "gridRpt_GridCreated"; //_gridObj.ClientSettings.ClientEvents.OnRowMouseOver = "_gridObj_RowMouseOver"; _gridObj.ClientSettings.ClientEvents.OnRowSelecting = "gridRpt_OnRowSelecting"; _gridObj.ClientSettings.ClientEvents.OnRowDeselecting = "gridRpt_OnRowDeSelecting"; _gridObj.ClientSettings.ClientEvents.OnRowClick = "gridRpt_OnRowClick"; //_gridObj.ClientSettings.Resizing.AllowRowResize = true; _gridObj.ClientSettings.Scrolling.AllowScroll = true; _gridObj.ClientSettings.Scrolling.UseStaticHeaders = true; _gridObj.GroupPanel.Visible = false; _gridObj.ClientSettings.AllowDragToGroup = true; _gridObj.GroupingEnabled = true; _gridObj.ShowGroupPanel = true; _gridObj.GroupPanel.Enabled = true; _gridObj.MasterTableView.TableLayout = GridTableLayout.Auto; _gridObj.ItemStyle.VerticalAlign = VerticalAlign.Middle; //this._gridObj.ExportSettings.IgnorePaging = true; //this._gridObj.ExportSettings.OpenInNewWindow = true; //this._gridObj.ExportSettings.IgnorePaging = true; _gridObj.MasterTableView.SortExpressions.AllowNaturalSort = false; _gridObj.MasterTableView.HierarchyLoadMode = GridChildLoadMode.ServerBind; _gridObj.AutoGenerateColumns = false; _gridObj.MasterTableView.AutoGenerateColumns = false; }<form id="form1" runat="server"> <div> <telerik:RadScriptManager ID="RadScriptManager1" Runat="server"> </telerik:RadScriptManager> <telerik:RadProgressManager ID="RadProgressManager1" Runat="server" /> <br /> <table style="width:100%;"> <tr> <td> <telerik:RadUpload ID="RadUpload1" Runat="server" AllowedFileExtensions=".jpg,.jpeg" OverwriteExistingFiles="True" TargetFolder="image/image_utenti"> </telerik:RadUpload> </td> <td> <asp:Label ID="Label1" runat="server" Text="Nessun file caricato"></asp:Label> </td> </tr> <tr> <td> <telerik:RadProgressArea ID="RadProgressArea1" Runat="server"> </telerik:RadProgressArea> </td> <td> <asp:Repeater ID="Repeater1" runat="server" Visible="False"> <HeaderTemplate> <div class="title"> File caricato:</div> </HeaderTemplate> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem, "FileName")%> <%#DataBinder.Eval(Container.DataItem, "ContentLength").ToString() + " bytes"%> <br /> </ItemTemplate> </asp:Repeater> </td> </tr> <tr> <td> <asp:Button ID="Button1" runat="server" Text="Button" /> </td> <td> </td> </tr> </table> </div> </form>
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.IO
Imports System.Web
Imports System.Web.SessionState
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Imports Telerik.Web.UI
Public Class UploadImgCard
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If RadUpload1.UploadedFiles.Count > 0 Then
Repeater1.DataSource = RadUpload1.UploadedFiles
Repeater1.DataBind()
Label1.Visible = False
Repeater1.Visible = True
Else
Label1.Visible = True
Repeater1.Visible = False
End If
End Sub
Private callBack As CacheItemRemovedCallback
Private Sub AddDeleteDependencyForFile(ByVal uploadedFileCollection As UploadedFileCollection)
Dim uploadedFile As UploadedFile
For Each uploadedFile In uploadedFileCollection
Dim timeOut As TimeSpan = TimeSpan.FromMinutes(5)
callBack = New CacheItemRemovedCallback(AddressOf DeleteFile)
Dim fullPath As String = Path.Combine(Server.MapPath(RadUpload1.TargetFolder), uploadedFile.GetName())
Context.Cache.Insert(uploadedFile.FileName, fullPath, Nothing, DateTime.Now.Add(timeOut), TimeSpan.Zero, CacheItemPriority.Default, callBack)
Next
End Sub
Private Sub DeleteFile(ByVal key As String, ByVal path As Object, ByVal reason As CacheItemRemovedReason)
File.Delete(DirectCast(path, String))
End Sub
Protected Sub RadUpload1_FileExists(sender As Object, e As Telerik.Web.UI.Upload.UploadedFileEventArgs) Handles RadUpload1.FileExists
Dim counter As Integer = 1
Dim file As UploadedFile = e.UploadedFile
Dim targetFolder As String = Server.MapPath(RadUpload1.TargetFolder)
Dim targetFileName As String = Path.Combine(targetFolder, file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension())
While System.IO.File.Exists(targetFileName)
counter += 1
targetFileName = Path.Combine(targetFolder, file.GetNameWithoutExtension() + counter.ToString() + file.GetExtension())
End While
file.SaveAs(targetFileName)
End Sub
End Class
| <head runat="server"> |
| <title></title> |
| <telerik:RadCodeBlock ID="cb1" runat="server"> |
| <script type="text/javascript"> |
| function InitiateAjaxRequest(arguments) { |
| var ajaxManager = $find("<%= RadAjaxManager1.ClientID %>"); |
| if (ajaxManager) ajaxManager.ajaxRequest(arguments); |
| } |
| </script> |
| </telerik:RadCodeBlock> |
| </head> |
| <body> |
| <form id="form1" runat="server"> |
| <div> |
| <script type="text/javascript"> |
| function OnClientFileSelected(radUpload, eventArgs) { |
| var input = eventArgs.get_fileInputField(); |
| var FileString = "UploadFile" + "|" + input.value; |
| InitiateAjaxRequest(FileString); |
| } |
| function confirmCallBackFn(arg) { |
| result = radalert("Confirm returned the following result: " + arg); |
| InitiateAjaxRequest('confirm|' + result); |
| } |
| </script> |
| <div> |
| <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest"> |
| </telerik:RadAjaxManager> |
| <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> |
| </telerik:RadScriptManager> |
| </div> |
| <div> |
| <telerik:RadUpload ID="RadUpload1" runat="server" Skin="Forest" OnClientFileSelected="OnClientFileSelected"> |
| </telerik:RadUpload> |
| </div> |
| <div> |
| <telerik:RadWindowManager ID="RadWindowManager1" runat="server"> |
| </telerik:RadWindowManager> |
| </div> |
| <div> |
| <input id="Button1" type="button" value="clientside button" onclick="javascript:InitiateAjaxRequest('btn|a');" /> |
| </div> |
| <div> |
| <input id="Button2" type="button" value="show CONFIRM BOX" onclick="radconfirm('Are you sure?', confirmCallBackFn); return false;" /> |
| </div> |
| </div> |
| </form> |
| </body> |
function confirmAddressChange() { if (document.forms[0].hfAddressChange.value =="") { var res = (confirm('Update Contact Addresses to Match?')==true); document.forms[0].hfAddressChange.value = res; } return true; }
<rad:RadMenuItem ID="rmitmUpdateInfo" runat="server" ImageUrl="~/Images_ABL_Std/Grid/Update.gif" Text="Update" Value="update" ToolTip="Accept changes" OnClientItemClicking ="confirmAddressChange()"> </rad:RadMenuItem> What I need to happen is to have the page run the javascript, where I set the value of a hidden field, then run the server code. At this point it skips the javascript and goes directly to the server code.
Anyone have a suggestion or answer?
Thanks.

