iSeller Commerce
iSeller POS Retail
iSeller POS F&B
iSeller POS Express
Crosslight
WebUI
ClientUI
What's New
Download Trial
Web Solution
Mobile Solution
Enterprise Solution
Custom Development
Blog
Community
Latest Development Blogs
ForumPostTopic
Browse By Tag
Hi,
We have big performance issue with grid having more than 70k rows.
We are using PagingMode="VirtualLoad" .I read from the grid help file that we can improve the performance my using either VirtaulLoadMode ="custom" or "LargeData".
I will first ask few question on "LargerData"
-------------------------------------
I tried this in a grid with 80k rows ,it loaded quickly.If I apply filter,sort ,is the filter and sort applied only to the initial loaded records(50) or to to full 80krows?Also I noticed the InitializeDataSource event is triggered each time when it tries to load the records and the Stored proecdure is executed each time.Is this the default behaviour or any solution for this?
I read in your site that the grid 'export' will export only the loaded records.Can i put the code to change the VirtualLoadMode="default" and rebinddatasource in the 'Export' event of the grid?
Another issue is grid performace is very low in a grid(10k rows) having selfreference with Load on demand when using VirtualLoadMode="LargeData"?Any solution to improve selefreference grid performace for 'largedata'?
Question on 'Custom'
----------------------------
I read about 'custom'.The problem is I am not using ISDataSource to bind the grid.So how will I use
SelectCount ,Select Method to retrive the records ?
I bind the grid in the InitilizeDatasource event using e.DataSource =mytable.
thanks
Melbin
Hi Arun,
Yes, it will load RequestedRows. E.g uses for top for first load. I don't quite undestand what you mean with "loses the previous set of data loaded". Does the previous data dissapear from WebGrid or something? I think the previous data would still remain.
Also, if you chaned VirtualPageSize into 2000, of course it will take some time to load. We should not compare the performance with load 50 records.
Regards,Handy
Yes, what you have been said is true. That's the fact when you used 'LargeData', all rows in VirtualPageSize will be rendered by the the grid. This mode is appropriate for large-size data. Everytime you try to load the records, InitializeDataSource event would be called. This is our WebGrid behaviour.
For issue inside SelfReference issue, could you please show/prove that the performance is very low?
I think you could not do that way. You will need specify default or LargeData since beginning.
For Custom VirtualLoad, we have a sample about that scenario. Please open our WebGridTutorial>>V3.5>>CustomVirtualLoad.aspx
Hope this helps.
Thanks for the answers.
But I found i more thing.InitializeDataSource event is triggered only once when i set the Grid DataCacheStorage="Session" .Also filter and sort is applied to full records now.
Another thing is I tried below code in the Page Load and it exported all the records.
WebGrid1.LayoutSettings.VirtualLoadMode = ISNet.WebUI.WebGrid.VirtualLoadMode.Default
The performance issue with Selfreference grid is that it takes 4-5 minutes to load 11k records.I am using VirtualLoadMode="LargeData". childs are loaded by 'Load on demand'. If I remove self reference of the grid ,it load very quickly.Any solution?this is a big issue for us as many client have huge amount of rows.
Thanks
Hi Melbin,
I am unable to replicate the selfreference issue in my environment. Maybe because i don't have any database which has many records like yours. So, could you help me by sending me a runable sample which replicates this issue? I will need this to investigate your issue. In fact, I need to replicate it and prove the issue you reported.
I am attaching a sample application (gridforintersoft.zip).Inside the zip file you can see the database backup file(gridtestdb) and the test application(WebSite13.zip).Please change the web.config to point to your server.Table lotable is having more than 11k records.It takes 1:50 minutes for load the initial records.When i scroll to load more records it took 2:50 minutes.
These are only parent records.In our real application child will be load by 'load on demand' when plus is expanded.loading child code in not avaialble in this sample code.
Any solution to improve the performance?
Can u look into this issue as early as possible since its a big issue for us ?
I am sorry for the late response because our internet connection was down yesterday. Thank you for your sample. I can run it in here and see the performance that you mentioned. In fact, our developer teams are not aware SelfReference for this many data. Your data is more than 10000 records which is very rare for SelfReference scenario.I have talked to our developer teams and they will enhance SelfReference scenario for many records.
Thanks for the update.Are you planning for any patch fix for this?
or should this be a part of next build ?
Regards
I don't it for now. But i have sent an email regarding this question. I will let you know as soon as i got the response.
Thanks Handy.
It would be great if you could let me know an update as early as possible and send us a patch fix.This is really a major issue for some of our clients using our product.
Yes, i understand the situation. As far i know, our developer teams are investigating your issue today. They should response at the short time. I will notify after they finished.
Hi Handy,
I would like to know when we are likely to get a fix for this issue.
Just to give you the seriousness of this issue, almost all grids we use are self referenced, and some of our client are loading 65000 records. The screen are unusable as it takes long time to load.
We can use load on demand, which has another issue, if the child tree has got more than 100 records it won't load as we set the VirtualPageSize="100" also since the child doen't realize the scroll of the main grid, it will never load more than 100.
Can you give us a wrokaround atleast till you get a final solution. also please keep us posted in which build (when) this fix will be avilable.
We are heavily dependent on you guys, hope you will come back with a positive answer
Arun
I got response from our developers teams. FYI, this is not a bug. It is a default behaviour when you used LargeData as VirtualLoadeMode. All data would be retrieved at beginning which caused bad performance.Since your data is more huge than expected for SelfReference scenario, it will get heavier than expected.When comes with huge data, we suggest our customer to use Custom for VirtualLoadMode. With this way, user can mantain their loaded data nicely.
e.gLet's begin from where's bind data (IntializeDataSourse).We can customize it by using query.Please take a look in modified code below:
Protected Sub WebGrid1_InitializeDataSource(ByVal sender As Object, ByVal e As ISNet.WebUI.WebGrid.DataSourceEventArgs) Handles lo_grdCourseCatalog.InitializeDataSource Dim dt As New DataTable Dim da As SqlDataAdapter = New SqlDataAdapter() da.SelectCommand = New SqlCommand() Dim myConnection As SqlConnection = New SqlConnection(conn) da.SelectCommand.CommandText = "Select top " & lo_grdCourseCatalog.VirtualLoadArgs.RequestedRows.ToString & " * from dbo.[lotable]" 'da.SelectCommand.CommandType = CommandType.TableDirect da.SelectCommand.Connection = myConnection lo_grdCourseCatalog.VirtualLoadArgs.TotalDataSourceRows = 11250//i defined the total //with a value, you can fill with query your total data with a query da.Fill(dt) e.DataSource = dt End Sub
Guys,
This is not working as expected, i have used VirtualLoad="Custom" but doesn't work with selfreference.
Also if we have more than 100 rows in an Inner child in self reference, how does the grid know to load the next 50 children (when VirtualPageSize="50")
Just to give you guys a statistics which i did today, i download the ComponentArt Grid and used the same datasource with selfreference and LoadOndemand enabled, the grid loaded in 8 sec for the first 50 records.
The same datasource for the first 50 records Intersoft Grid took nearly 15-20 min.
All we are doing is to load first 50 parent records from a pool of 36310 records and when you click the + it will fire another query to get the child and bind the record.
Are you guys saying the grid can't handle this. if so we seriously need to change 25 - 30 pages, which is as good as redesigning the application UI.
I would like to know what is happening in the grid for these many records and we really see this as an issue in the grid failing to Load Large data in Self Reference.
I can't explain more how important this fix is for us.
Have you tested out my suggestion and detail codes? Actually, what you described SelfReference LoadOnDemand performance in ComponentArt is what our WebGrid can also do. As I said before, you need to handle it in InitializeDataSource for parent. You can also customize in IntializeSelfReferenceDataSource for child.
For example, I modified the sample you sent me. It work great and the performance was awesome (2-3sec). If you did not look at my code and suggestion in detail, it would take nearly 15-20min.
FYI, please also download the hotfix based on the link that I gave you at previous post. Hope this helps.
I have done exactly what you said in the sample, still i am not getting the result as expected
Please the attached zip file, which has 2 Pages.
Default7.aspx - i used with self reference in this page, i cant load more records but Self Reference Works.
Default8.aspx - i used without self reference, i can load more records but Self Reference doesn't Works
In both case i am using the following layout setting
<LayoutSettings VirtualPageSize="50" PagingMode="VirtualLoad" AutoHeight="true" SizeHeightBy="-6" VirtualLoadMode="Custom"> </LayoutSettings>
Can you please advice us what's wrong in the sample i attached
FYI - i have attched an image.doc, in that you can see the output generated
You can also use the same database we submitted in the thread to replicate this issue.
Have you updated into the hotfix link that i refer to you before (see previous posts) ? I tested your sample and it worked well in here. FYI, I only changed the connection string on your sample. As i described at previous posts, you need also to apply the latest WebGrid and WebUIFramework hotfix. Here, I decided to attach them in there.
Thanks Handy
That explains well,
Thanks a lot guys, the solution you offered work fine. We are able to load large volume of data.
I will reply to the thread once we implement a final solution, so it will be useful for others who are looking for something simillar
Yes, apply the latest hotfixes are required. Otherwise, you will face a total load records like before. I am sure you can see the great performance now. Please let me know if you have another question.
One thing i noticed is each and evreytime you scroll, it loads data from 1 to RequestedRows (as it uses top)
is their anyway we can specify the Range say 1- 100 first time and then 101-200
I did try this way, but since it goes to the IntializeDatasource for each call, it loses the previous set of data loaded.
Is this possible, this will elimate the no. of records binding each time, also in the sample i gave, change the VirtualPageSize to 2000, you will see that after 3 scrolls it takes double the time for each load.
Change the SQL Squery to the following
WITH lo AS ( SELECT ROW_NUMBER() OVER (ORDER BY ID) AS ROW, * FROM lotable WHERE parent_learning_object IS NULL) SELECT * FROM lo WHERE Row BETWEEN " & _from & " AND " & _to & ";"
Arun,
Have you implemented your final solution for this problem?
I am attempting a similar build, but have been unsuccessful with my solution.
Any tips you could offer would be greatly appreciated.
Hello Frank,
Can your provide us with some details? Also, what is the problem that you currently have?
or
Choose this if you're already a member of Intersoft Community Forum. You can link your OpenID account to your existing Intersoft Social ID.
Choose this if you don't have an Intersoft account yet. Your authenticated OpenID will be automatically linked to your new Intersoft account.
Enter your Wordpress Blogname