Hi we upgraded infragistics from 13.1 to 15.2, our client found out performance degraded when scrolling UltraGird with 1000+ rows. The more data shown in a row, the slower it is when dragging scroll bar down the page.
one of the column style is FormattedTextEditor.
We'd like to know if there is any change from 13.1 to 15.2 that affected the performance on scrolling UltraGrid.
Thanks,
Crystal,
Hello Crystal,
I followed the steps you described and I was unable to reproduce the issue with the grid’s slow scrolling. I have made two identical samples: one using 13.1, and the other – 15.2 version of NetAdvantage. In the samples, the grid has 1000 rows and FormattedTextEditor is embedded into the last column.
As I do not see any difference between the samples performance when scrolling the grid data, please feel free to modify the attached sample and send it back, or send a small sample project of your own that reproduces the issue you are describing.
Thank you for looking into this issue, please find enclosed sample projects for 15.2 and 13.1. We are able to see the difference between the two versions. In our application, it's worse.
Crystal.
I do not see any performance difference between the two samples when scrolling down the grid. There have not been made any changes regarding the scrolling in the grid between 13.1 and 15.2 versions that should cause performance issue. In order to make more visible the row change when scrolling I have changed the images in the sample projects so that every row will have a different picture embedded in it. Attached is also a video record of the test with the new samples.
Hi,
I work with Crystal (OP) at the same company. We have had more clients reporting the performance issue while scrolling the grid. I have more details to add to this case.
The issue is indeed with the FormattedTextEditor and is specific to when the formatted text contains icons. In our application, there is an option to turn on/off the presence of icons in the FormattedTextEditor column. When the column does not have any icons being rendered, there is a bit of noticeable lag while scrolling. When the column does have icons being rendered, there is a great amount of lag while scrolling. My test data only has about 400 rows of data, nowhere near the 1000 that Crystal original suggested.
When Crystal originally opened this case, our application was using Infragistics Professional 2015 Volume 2 (as indicated by the dll versions mentioned above in the notes from Crystal). This is also the version that our current clients are using where they are reporting this lag.
Since the release of our application which uses Infragistics Professional 2015 Volume 2 we have since upgraded our next release to use Infragistics Professional 2017 Volume 1. In this newer release, we do not see any lag at all during scrolling of the grid, with or without icons present in the column. I am using the exact same data for the older release as I am for the new release.
As a test, I updated the dependencies in our previous release from Infragistics Professional 2015 Volume 2 to now use Infragistics Professional 2017 Volume 1. I did not see any lag while scrolling. Although this worked in my test environment, this is not a viable option for us to update our older release of the application to use the newer Infragistics assemblies. This would be a major regression of the application both for us and our clients.
There is clearly a difference between the performance of Infragistics Professional 2015 Volume 2 and Infragistics Professional 2017 Volume 1 in regards to scrolling in the grid when there are icons present.
Are there any patches available that address this performance issue? If not, can you please provide a patch. This is becoming a major issue for our clients. We would really appreciate any help that you can provide.
Lindos.
Hi Lindos,
I'm afraid I don't understand what you are asking. You say you cannot update your older applications to the newer version because you are concerned about regression - but then you are asking for a patch. But any patch we were to give you would have the same risks as a new version. You would still have to update you application to use new assemblies, re-test, rebuild, and re-distribute it to your users. So that seems like a contradiction to me.
Having said that, if you can post a small sample project here that we can run and debug, then we can try to track down exactly what changed between v15.1 and v17.1 and I might be able to tell you what version that change was made. That would limit the number of changes you would be exposing your application to - you wouldn't have to necessarily make a two-year jump. And maybe even potentially give you a workaround so you wouldn't have to change assemblies at all. But any way you slice it, there's no getting around rebuilding and re-distributing your application.
Hi Mike,
In regards to the regression of the application. My concern is that if we were to upgrade the application to use a full new release of the Infragistics assemblies that this would require a full regression of the application. Instead, a small patch of the assemblies which have the performance fix would allow us to target regression to the specific areas of our application which would be affected. This is by far a much smaller area of regression. I agree that some level of regression would need to be done, however, limiting the scope would be the ideal solution.
I have done some further testing with the Infragistics dlls. I downloaded the latest release you have for v15.2 (15.2.20152.2118). Our application is currently using v15.2 (15.2.20152.2052) in which we see the performance issue.
I updated our application to use the 2118 dlls and discovered that there is no performance issues with this release. I further narrowed this down by progressively swapping out the 2052 versions with the 2118 versions. This lead to Infragistics4.Win.UltraWinGrid.v15.2.dll being the one dll where the performance issue was noticed as being fixed (note this also required me to reference the 2118 versions of Infragistics4.Shared.v15.2.dll and Infragistics4.Win.v15.2.dll as they are dependencies).
This test has at least helped to narrow down the scope of versions of where the fix may have been introduced to somewhere between the release of 2052 and 2118. I hope this can help you to take a look at what may have changed that would affect scrolling of the grid where there are icons in the FormattedTextEditor column type. I suspect the issue is not necessarily in the scrolling but more in the rendering of the field.
In the meantime, I am working on putting together a sample application which demonstrates the performance issue. This may take some time as I need to migrate the production code for the grid over to the sample application.
Would it be possible for us to distribute the three 2118 versions of the dlls alongside the 2052 ones (which are all installed in the GAC)? This could be considered a kind of patch. Do you foresee any possible conflicts which could arise from having mixed version references in our project? In other words, would 2118 be backwards compatible with 2052?
Thanks for your time,
That's great that you narrowed it down. Build 2118 might be your best best, then. I am not even sure if there were any service releases in between those two, or if they are still available.
I took a quick look at the history of the code for 15.2, but I can't narrow it down by control, only by assembly, and most of the code for the FormattedTextEditor is in the Win assembly, which has a ton of changes for that time period, so nothing really jumped out at me. If you can provide a smaple that I can run and debug that demonstrates the problem, I can definitely narrow down the exact change or bug fix that fixed it, though.
So... I did a little bit of testing, but I don't think I was able to find the problem. I did find A problem in 15.2 where there is a scrolling performance issue. But in that case the images also don't display. And you didn't mention anything about your images not even showing up, so I suspect the thing I found was something else. Also, the problem I found happens with the latest build, and yours doesn't.
Anyway, at this point there's not much else I can think to do without a sample from you that reproduces the issue you are having. I have attached my sample here, just in case you want to use it as a jumping-off point.
Also, I thought of one other thing. I lot of times, performance issues are caused by Exception that are being caught and handled, so you don't see the Exception message. You might want to try setting Visual Studio to break on all run-time exceptions and see if any are occurring when you scroll the grid. It probably won't help much, but it might give us some clue.
WindowsFormsApp23.zip
The value of the field in the DataRow is being set when we update the UltraDataSource for the grid. This happens as we navigate from one business object to the next (the grid data is refreshed for each business object by first clearing the rows collection in the UltraDataSource). The code spins through a collection (the row data) in the business object and calls the UltraDataSource objects Rows.Add() method for each new row. Each new DataRow's column values are then updated. After all the data has been loaded we don't update it any further. From this point on (until the next business object is loaded) the data remains static.
In what event are you setting the value of the field in the DataRow. I assume that's done before you bind to the grid. Or are you dynamically building or changing the data as you scroll, like in the InitializeRow event of the grid or something?
Okay, that makes sense. Not sure why I was confused - it seems perfectly obvious from the code, now.
Clarifying what ImageX is.
In the Visual Studio project, a Resource file (Resources.resx) is added to the project under the Properties folder. Opening up the Resource file in Visual Studio you can select the Images section from the dropdown. The Images are added to this section by drag and drop from Windows Explorer where the image filename becomes the key in the Resource file. The Resource file has a build action of Embedded Resource.
The embedded images are referenced from the Resource file in code using the following:
var image = Properties.Resources.ImageX;
Where ImageX is the name of the image in the resource file.
We did discuss keeping the images as is, embedded in a resource file, and writing them to disk at the time they were needed. This option was ultimately rejected due to business needs and the decision to deploy the images up front in a folder was made.
If I can reproduce the issue in a sample project I will definitely send it your way.
Thanks for your help.