This is a migrated thread and some comments may be shown as answers.

WPF RadGridView Very Bad Performance when Binding

9 Answers 664 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Adnan
Top achievements
Rank 1
Adnan asked on 29 Oct 2013, 09:01 AM
I use RadGridView , my business is display stock market ,so high performance is a must .
When i use  Regular WPF DataGrid with MVVM Design Pattern it's working very good for my , when i replace  (WPF DataGrid) with (RadGridView ) the performance became very bad  , your fast response is highly appreciated , See  the the Following

View Model :
using INtra_Day_EXplorer.Business_Logic;<br>using ServiceClient.HistoricalINDEXServiceClient;<br>using System;<br>using System.Collections.Generic;<br>using System.Collections.ObjectModel;<br>using System.ComponentModel;<br>using System.Dynamic;<br>using System.Linq;<br>using System.Text;<br>using System.Windows.Documents;<br>using System.Timers;<br>using System.Diagnostics;<br>using System.Threading;<br>using System.Windows.Threading;<br><br>namespace INtra_Day_EXplorer.View<br>{<br>    class Market<br>    {<br>        #region FBD - MSeif - 29-10-2013 Properties<br>        private MarketWatch[] data = null;<br>        private Stopwatch stopWatch = new Stopwatch();<br>        private ServiceWrapper serviceWrapper = ServiceWrapper.GetSingleton();<br>        IEnumerable<short> IntCompanyCode { get; set; }<br>        IEnumerable<short> IntSectorCode { get; set; }<br>        List<short> CompaniesSectorsCodes { get; set; }<br>        private dynamic ExpandoTemplate { get; set; }<br>        public Boolean IsRun { get; set; }<br>        private int index { get; set; }<br>        #endregion<br><br>        #region FBD - MSeif - 28-10-2013 - Binding Lists for (Sector/Comapny/Comapies inside Sctors)<br>        private ObservableCollection<ExpandoObject> bindingList_CurrentCompanyWatch = new AsyncObservableCollection<ExpandoObject>();<br>        public ObservableCollection<ExpandoObject> BindingList_CurrentCompanyWatch<br>        {<br>            get { return bindingList_CurrentCompanyWatch; }<br>            set<br>            {<br>                bindingList_CurrentCompanyWatch = value;<br>            }<br>        }<br><br>        private ObservableCollection<ExpandoObject> bindingList_CurrentSectorWatch = new AsyncObservableCollection<ExpandoObject>();<br>        public ObservableCollection<ExpandoObject> BindingList_CurrentSectorWatch<br>        {<br>            get { return bindingList_CurrentSectorWatch; }<br>            set<br>            {<br>                bindingList_CurrentSectorWatch = value;<br>            }<br>        }<br><br>        private ObservableCollection<ExpandoObject> bindingList_CurrentSectorDetailsWatch = new AsyncObservableCollection<ExpandoObject>();<br>        public ObservableCollection<ExpandoObject> BindingList_CurrentSectorDetailsWatch<br>        {<br>            get { return bindingList_CurrentSectorDetailsWatch; }<br>            set { bindingList_CurrentSectorDetailsWatch = value; }<br>        }<br>        #endregion<br><br>        /// <summary><br>        /// FBD - MSeif - 28-10-2013 <br>        /// Get List Of Codes(Sctor/Company) and start Load data to Binding Lists (Using Backgroud thread)<br>        /// </summary><br>        public Market()<br>        {<br>            //get companies Codes<br>            IntCompanyCode = CompanyManager.WorkingCompanies.FindAll((CompanyInfo cinfo) => cinfo.Code <= MainData.LAST_COMPANY_CODE && cinfo.Code >= MainData.FIRST_COMPANY_CODE).Select(c => c.Code);<br>            //get sectors Codes<br>            IntSectorCode = CompanyManager.WorkingCompanies.FindAll((CompanyInfo cinfo) => cinfo.Code <= MainData.LAST_PDS_CODE).Select(c => c.Code);<br>            //set all codes(sectors/comapnies) in one list<br>            CompaniesSectorsCodes = IntCompanyCode.ToList();<br>            for (int i = 0; i < IntSectorCode.ToList().Count; i++)<br>            {<br>                CompaniesSectorsCodes.Add(IntSectorCode.ToList()[i]);<br>            }<br>            IsRun = true;//allow load data from WCF service<br><br>            // Create new instance of the thread.<br>            Thread marketWatchThrd = new Thread(new ThreadStart(RunMarketWatch));<br>            // Set the thread to be a background one<br>            marketWatchThrd.IsBackground = true;<br>            // Start the order book requests<br>            marketWatchThrd.Start();<br><br>        }<br><br>        /// <summary><br>        /// FBD - MSeif - 28-10-2013<br>        /// Get Data from WCF service and bind this data to it's List(Sectors/Companies)<br>        /// </summary><br>        protected void RunMarketWatch()<br>        {<br>            while (IsRun)<br>            {<br>                try<br>                {<br>                    //Load Data For (Sctors/Companies)<br>                    data = serviceWrapper.ServiceReference.GetCurrentMarketWatch(CompaniesSectorsCodes.ToArray());<br>                    if (data != null)<br>                    {<br>                        for (int i = 0; i < data.Length; i++)<br>                        {<br>                            // sector check<br>                            if (data[i].SymbolID <= MainData.LAST_PDS_CODE)<br>                            {<br>                                ExpandoTemplate = ToDynamic(data[i]);//Cast each object(Sector) from BackEnd to be Dynamic object(ExpandoObject)<br>                                index = BindingList_CurrentSectorWatch.Cast<dynamic>().Where(c => c.SymbolID == ExpandoTemplate.SymbolID).Select<dynamic, int>(x => BindingList_CurrentSectorWatch.IndexOf(x)).SingleOrDefault<int>();//Get the Index For Current Sector in the binding list<br><br>                                if (IntSectorCode.ToList().Count > BindingList_CurrentSectorWatch.Count)<br>                                    BindingList_CurrentSectorWatch.Add(ExpandoTemplate);//add new sector to the binding list<br>                                else<br>                                {<br>                                    BindingList_CurrentSectorWatch[index] = ExpandoTemplate;//Edit sector to the binding list<br>                                }<br>                            }<br>                            else//Companies check<br>                            {<br>                                ExpandoTemplate = ToDynamic(data[i]);//Cast each object(company) from BackEnd to be Dynamic object(ExpandoObject)<br>                                index = BindingList_CurrentCompanyWatch.Cast<dynamic>().Where(c => c.SymbolID == ExpandoTemplate.SymbolID).Select<dynamic, int>(x => BindingList_CurrentCompanyWatch.IndexOf(x)).SingleOrDefault<int>();//Get the Index For Current company in the binding list<br><br>                                if (IntCompanyCode.ToList().Count > BindingList_CurrentCompanyWatch.Count)<br>                                    BindingList_CurrentCompanyWatch.Add(ExpandoTemplate);//add new company to the binding list<br>                                else<br>                                {<br>                                    BindingList_CurrentCompanyWatch[index] = ExpandoTemplate;//edit new sector to the binding list<br>                                }<br>                            }<br>                        }<br>                    }<br><br>                }<br>                catch (Exception ex)<br>                {<br>                    String str = ex.Message;<br>                    // throw;<br>                }<br>                Thread.Sleep(200);<br>            }<br><br>        }<br><br>        /// <summary><br>        /// FBD - MSeif - 28-10-2013<br>        /// Cast any object to Dynamic object(ExpandoObject)<br>        /// </summary><br>        /// <param name="value">Object to be Cast</param><br>        /// <returns>Dynamic Object(Exbando Object)</returns><br>        public static dynamic ToDynamic(object value)<br>        {<br>            IDictionary<string, object> expando = new ExpandoObject();<br><br>            foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))<br>                expando.Add(property.Name, property.GetValue(value));<br><br>            return expando as ExpandoObject;<br>        }<br><br>        /// <summary><br>        /// FBD - MSeif -29-10-2013<br>        /// Load Childs Companies to Specific sector<br>        /// </summary><br>        /// <param name="SectorSymbolID"Sector Symbol ID></param><br>        public void LoadChilds(short[] codes)<br>        {<br>            data = (dynamic)serviceWrapper.ServiceReference.GetCurrentMarketWatch(codes);<br>            if (data != null)<br>            {<br>                bindingList_CurrentSectorDetailsWatch = (dynamic)(data);//new ObservableCollection<MarketWatch><br>            }<br>        }<br><br><br><br><br>    }<br>}<br><div></div>
XAML :
<div><UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <br>             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <br>             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" <br>             xmlns:telerikQuickStart="clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=QuickStart.Common" <br>             xmlns:local="clr-namespace:INtra_Day_EXplorer.View.UserControls" <br>             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" <br>             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" <br>             mc:Ignorable="d" <br>             x:Class ="INtra_Day_EXplorer.View.UserControls.ucMarketWatch"<br>             xmlns:MarketWatch="clr-namespace:INtra_Day_EXplorer.View" <br>             d:DesignWidth="535" d:DesignHeight="205"><br>    <UserControl.Resources><br>        <DataTemplate x:Key="StockChangeTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding Change}" OldStockPrice="{Binding ChangePrev}" /><br>        </DataTemplate><br>        <DataTemplate x:Key="StockChangePercTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding ChangePerc}" OldStockPrice="{Binding ChangePercPrev}" /><br>        </DataTemplate><br>        <DataTemplate x:Key="StockMoneyValueTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding MoneyValue}" OldStockPrice="{Binding MoneyValuePrev}" /><br>        </DataTemplate><br><br>        <DataTemplate x:Key="StockTradesTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding _trades}" OldStockPrice="{Binding TradesPrev}" /><br>        </DataTemplate><br>        <DataTemplate x:Key="StockTransactionPriceTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding _transactionPrice}" OldStockPrice="{Binding TransactionPricePrev}" /><br>        </DataTemplate><br>        <DataTemplate x:Key="StockVolumeTemplate"><br>            <local:ucStockPricePresenter StockPrice="{Binding Volume}" OldStockPrice="{Binding VolumePrev}" /><br>        </DataTemplate><br><br>        <Style x:Key="DataGridContentCellCentering" TargetType="{x:Type DataGridCell}"><br>            <Setter Property="Template"><br>                <Setter.Value><br>                    <ControlTemplate TargetType="{x:Type DataGridCell}"><br>                        <Grid Background="{TemplateBinding Background}"><br>                            <ContentPresenter VerticalAlignment="Center" /><br>                        </Grid><br>                    </ControlTemplate><br>                </Setter.Value><br>            </Setter><br>        </Style><br>        <br>        <MarketWatch:Market x:Key="Market"></MarketWatch:Market><br>    </UserControl.Resources><br>    <Grid DataContext="{StaticResource Market}"><br>        <Grid.RowDefinitions><br>            <RowDefinition Height="20"></RowDefinition><br>            <RowDefinition Height="21*"></RowDefinition><br>        </Grid.RowDefinitions><br>        <br>        <Grid Grid.Row="0"><br>            <Grid.ColumnDefinitions><br>                <ColumnDefinition Width="5*"/><br>                <ColumnDefinition Width="6*"/><br>            </Grid.ColumnDefinitions><br>            <Canvas Grid.Column="1" ><br>               <br>                <telerik:RadComboBox  x:Name="cb_View" SelectionChanged="cb_View_SelectionChanged"  Width="80" Canvas.Right="10"  Canvas.Top="5" Grid.Column="1" SelectedIndex="0" ><br>                    <telerik:RadComboBoxItem Content="Company"/><br>                    <telerik:RadComboBoxItem Content="Sector"/><br>                </telerik:RadComboBox><br>                <telerik:RadComboBox  x:Name="cb_Currency"  Canvas.Right="95" Canvas.Top="5" Width="60"  /><br>                <TextBox Name="txt_Rate" Text="{Binding ChangePrev}" Canvas.Top="5" Canvas.Right="160" Width="60" TextChanged="txt_Rate_TextChanged" KeyDown="txt_Rate_KeyDown"></TextBox><br>            </Canvas><br>        </Grid><br><br>        <telerik:RadGridView x:Name="grd_Result_Sector"   <br>                             GroupRenderMode="Flat"<br><span class="Apple-tab-span" style="white-space:pre">                         </span> AutoGenerateColumns="False"<br><span class="Apple-tab-span" style="white-space:pre">                            </span> CanUserFreezeColumns="True"<br>                             CanUserDeleteRows="True"<br>                             CanUserInsertRows="False"<br>                             IsReadOnly ="True"<br>                             Grid.Row="1"<br><span class="Apple-tab-span" style="white-space:pre">                         </span> RowIndicatorVisibility="Collapsed"<br>                             BorderThickness="1"<br>                             BorderBrush="#3090C7"<br>                             Visibility="Hidden"<br>                             ItemsSource="{Binding BindingList_CurrentSectorWatch}"<br><span class="Apple-tab-span" style="white-space:pre">                            </span> IsFilteringAllowed="True" Margin="1,10,1,1" ShowGroupPanel="False"<br>                             AlternationCount="2"><br>            <telerik:RadGridView.Columns><br>                <telerik:GridViewDataColumn Header="Name"   DataMemberBinding="{Binding CompanyName}"  Width="*" /><br>                <telerik:GridViewDataColumn Header="Code"  DataMemberBinding="{Binding SymbolID,StringFormat={}{0:0.####}}"  Width="*" /><br>                <telerik:GridViewDataColumn Header="Change" CellTemplate="{StaticResource StockChangeTemplate}"  DataMemberBinding="{Binding Change}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Change Percentage" CellTemplate="{StaticResource StockChangePercTemplate}" DataMemberBinding="{Binding ChangePerc}" DataFormatString="{}{0:C}" Width="*" /><br><br>                <telerik:GridViewDataColumn Header="Money Value" CellTemplate="{StaticResource StockMoneyValueTemplate}" DataMemberBinding="{Binding MoneyValue}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Trades" CellTemplate="{StaticResource StockTradesTemplate}" DataMemberBinding="{Binding _trades}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Transaction Price" CellTemplate="{StaticResource StockTransactionPriceTemplate}" DataMemberBinding="{Binding _transactionPrice}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Volume" CellTemplate="{StaticResource StockVolumeTemplate}" DataMemberBinding="{Binding Volume}" DataFormatString="{}{0:C}" Width="*" /><br>            </telerik:RadGridView.Columns><br><br>        </telerik:RadGridView><br>        <telerik:RadGridView x:Name="grd_Result_Company"   GroupRenderMode="Flat"<br><span class="Apple-tab-span" style="white-space:pre">                          </span> AutoGenerateColumns="False"<br><span class="Apple-tab-span" style="white-space:pre">                            </span> CanUserFreezeColumns="True"<br>                             CanUserDeleteRows="True"<br>                             CanUserInsertRows="False"<br>                             IsReadOnly ="True"<br>                             Grid.Row="1"<br><span class="Apple-tab-span" style="white-space:pre">                         </span> RowIndicatorVisibility="Collapsed"<br>                             BorderThickness="1"<br>                             BorderBrush="#3090C7"<br>                             Visibility="Visible"<br>                             ItemsSource="{Binding BindingList_CurrentCompanyWatch}"<br><span class="Apple-tab-span" style="white-space:pre">                          </span> IsFilteringAllowed="True" Margin="1,10,1,1" ShowGroupPanel="False"<br>                             AlternationCount="2"><br>            <telerik:RadGridView.Columns><br>                <!--<telerik:GridViewDataColumn Header="Name"  DataMemberBinding="{Binding CompanyName}" Width="*" />--><br>                <telerik:GridViewDataColumn Header="Code"  DataMemberBinding="{Binding SymbolID}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Change" CellTemplate="{StaticResource StockChangeTemplate}" DataMemberBinding="{Binding Change}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Change Percentage" CellTemplate="{StaticResource StockChangePercTemplate}" DataMemberBinding="{Binding ChangePerc}" DataFormatString="{}{0:C}" Width="*" /><br><br>                <telerik:GridViewDataColumn Header="Money Value" CellTemplate="{StaticResource StockMoneyValueTemplate}" DataMemberBinding="{Binding MoneyValue}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Trades" CellTemplate="{StaticResource StockTradesTemplate}" DataMemberBinding="{Binding _trades}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Transaction Price" CellTemplate="{StaticResource StockTransactionPriceTemplate}" DataMemberBinding="{Binding _transactionPrice}" DataFormatString="{}{0:C}" Width="*" /><br>                <telerik:GridViewDataColumn Header="Volume" CellTemplate="{StaticResource StockVolumeTemplate}" DataMemberBinding="{Binding Volume}" DataFormatString="{}{0:C}" Width="*" /><br>            </telerik:RadGridView.Columns><br>        </telerik:RadGridView><br><br><br><br>    </Grid><br></UserControl><br><div><br></div><br></div>
In Code Behind :
I Only Declare Market Object :
 Market objMarket = new Market(); 

9 Answers, 1 is accepted

Sort by
0
Dimitrina
Telerik team
answered on 01 Nov 2013, 08:47 AM
Hi,

My suggestion is you to first check if you have any Binding errors in the Output Window. 
Then, please ensure that you have not placed RadGridView in a container that will measure it with infinity - for example StackPanel. You can refer to the Degraded Performance article.

Regards,
Didie
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0
Daniele
Top achievements
Rank 1
answered on 09 May 2016, 04:02 PM
Hi,

I'm having serious performance problems with RadGridView.

I havemy User Control with the following Content, and my DataContext is a ViewModel Class with one member called DataItem. This element has one property Nodes that is an ObservableCollection<Nodes> and each node has a property called Signals that is an ObservableCollection<Signal>. Just few properties inside both as you can see from the following code.

I need to navigate and if necessary modify my nodes and their signals, so I'm trying to use RadGridView with Hierarchical approach. Each node has maximum 500/600 signals but also with 30 signals I have performace problems (5/6 seconds to load 500 signals) and when I try to scroll signals the control is really slow...

What can I do to improve performances? Any suggestion?

R

 

<telerik:RadBusyIndicator IsBusy="{Binding OperationOngoing}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition />
            </Grid.RowDefinitions>
 
            <Border Grid.Row="2" Margin="5">
                <telerik:RadTabControl>
                    <telerik:RadTabItem Header="Progettazione">
                        <telerik:RadTabControl>
                            <telerik:RadTabItem Header="Nodi">
                                <Grid>
                                    <!--NODI-->
                                    <telerik:RadGridView x:Name="radgrdNodes" AutoGenerateColumns="False" ValidatesOnDataErrors="InEditMode"
                                                         IsReadOnly="{Binding IsReadOnly}" ItemsSource="{Binding DataItem.DesignKit.Nodes}"
                                                         CanUserInsertRows="True" CanUserFreezeColumns="True" NewRowPosition="Top"
                                                         CanUserResizeRows="False" AddingNewDataItem="OnRadGrdNodes_AddingNewDataItem" SelectionUnit="FullRow" SelectionMode="Single"
                                                         CanUserDeleteRows="True" RowDetailsVisibilityMode="VisibleWhenSelected">
                                        <telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" Header="Nome"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Description}" Header="Descrizione"/>
                                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Number}" Header="Numero"/>
</telerik:RadGridView.Columns>
                                        <telerik:RadGridView.RowDetailsTemplate>
                                            <DataTemplate>
<telerik:RadGridView x:Name="radgrdSignals" ValidatesOnDataErrors="InEditMode"
                                                         ItemsSource="{Binding Signals}"
                                                         AutoGenerateColumns="False" CanUserInsertRows="True" CanUserFreezeColumns="True" NewRowPosition="Top"
                                                         CanUserResizeRows="False" AddingNewDataItem="OnRadGrdSignals_AddingNewDataItem" SelectionMode="Extended"
                                                         CanUserDeleteRows="True">
                                                    <telerik:RadGridView.Columns>
<telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding IsSymbol}" Header="Simbolo"/>
                                                        <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" Header="Nome"/>
</telerik:RadGridView.Columns>
                                                </telerik:RadGridView>
                                            </DataTemplate>
                                        </telerik:RadGridView.RowDetailsTemplate>
                                    </telerik:RadGridView>
                                </Grid>
                            </telerik:RadTabItem>
                        </telerik:RadTabControl>
                    </telerik:RadTabItem>
</telerik:RadTabControl>
            </Border>
        </Grid>
</telerik:RadBusyIndicator>

What can I do to improve performances? Any suggestion?

Regards

 

0
Stefan Nenchev
Telerik team
answered on 11 May 2016, 11:25 AM
Hi Daniele,

I tried reproducing your setup and the issue you are experiencing but could not observe such degraded performance or delayed scrolling. What is the control version that you are using at your end? I have attached a sample project to my reply. Can you please modify it so that the undesired behavior can be observed and raise a ticket so we can further investigate the exact scenario? 

Generally, I suggest you go through the Tips and Tricks article on different approaches for maximizing the performance of RadGridView.

Regards,
Stefan Nenchev
Telerik
Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
0
Daniele
Top achievements
Rank 1
answered on 11 May 2016, 04:05 PM

Hi Stefan,

first of all, thank you for your support.

I'm trying with your project but I have the same problem (about 2 seconds to display each node signals)...

I'm using last telerik wpf ui controls 2016 Q2 and I'm using a DELL M3800 laptop series with i7 processor, SSD disk and a 4K display.

Can 4k display be a problem for your controls?

Because I see that memory usage is really big and sometimes can happen that application goes up to 1gb without displaying signals and without responding.

 

Regards

0
Stefan Nenchev
Telerik team
answered on 13 May 2016, 12:36 PM
Hi,

Can you please confirm if you are observing this excessive memory usage on the sample application I sent you? Indeed, it should not take so many resources. Would it be possible for you to test the performance of the application on another machine? Can you also make sure that the UI Virtualization of RadGridView is switched on(it is by default unless you have explicitly disabled it)?

Regards,
Stefan Nenchev
Telerik
Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
0
Mark
Top achievements
Rank 1
answered on 11 Aug 2016, 07:15 PM
[quote]Daniele said:

Because I see that memory usage is really big and sometimes can happen that application goes up to 1gb without displaying signals and without responding.[/quote]

I'm seeing this same behavior. Were you able to resolve this problem?

Regards,

Mark R.

0
Stefan Nenchev
Telerik team
answered on 15 Aug 2016, 01:27 PM
Hi Mark,

The issue seems strongly setup specific so sharing more details regarding your scenario will be appreciated. The best case scenario would be to raise a ticket with a sample project that shows the behavior as it will be much easier for us to diagnose the root of the issue this way.

Regards,
Stefan Nenchev
Telerik by Progress
Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
0
Mark
Top achievements
Rank 1
answered on 15 Aug 2016, 05:27 PM

Hi Stefan,

In my specific case, I eventually determined that the RadGridView instance only exhibited this problem when contained within a RadExpander.

In the right circumstances, the RadGridView instance in question would not only perform badly, but it would lock up the UI and continually consume memory (would easily reach GBs of RAM usage if I let it run).

The layout of my application is rather complex, with the user control containing the RadGridView instance being switched out dynamically (via ContentPresenter bound to the selected item of a RadTreeView). I eventually found that either setting the height of the RadGridView or removing the surrounding RadExpander would resolve the problem, so I expect that the control gets caught in some type of measurement/rendering loop.

- Mark R.

0
Stefan Nenchev
Telerik team
answered on 16 Aug 2016, 12:34 PM
Hello Mark,

I am glad to hear that you have managed to resolve the issue. Indeed most of the times such performance degradation is observed, it is due to the measurement of the RadGridView. If you notice something additional that is affecting the performance, do not hesitate to report it. 

Regards,
Stefan Nenchev
Telerik by Progress
Do you need help with upgrading your AJAX, WPF or WinForms project? Check the Telerik API Analyzer and share your thoughts.
Tags
GridView
Asked by
Adnan
Top achievements
Rank 1
Answers by
Dimitrina
Telerik team
Daniele
Top achievements
Rank 1
Stefan Nenchev
Telerik team
Mark
Top achievements
Rank 1
Share this question
or