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
Function
protected
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.