We purchased the licenses for Telerik WinForms components and having memory leaks. I've already read similar threads (performance considerations
, increasing execution speed of Telerik assemblies
), but it didn't solve my problem. Other then that, we verified the code against the following rules which are best coding practices that DEV teams must follow:
— objects that implements IDisposable must be disposed;
— grids must be wrapped with BeginUpdate & EndUpdate methods whenever they are getting changed (same holds true for RadTreeView);
— no excessive database connections;
— database connections are wrapped with C# "using" operator;
— time-consuming operations moved to background processes, which writes Trace/Debug messages when finished;
— custom themes are built in separate DLL and initialized in new thread which gets closed, when job is done.
The app itself represents MDI container with RadDock on it (Dock = Fill). All MDI child forms are opened in RadDock's new tab. The default tab is Desktop with a grid and 2 more Tool Windows: Tree View which is used as collapsible menu and Recent Activity at the bottom (in fact, similar control layout as VS2010 or SQL Management Studio). We are using custom Telerik themes, which are compiled into separate DLLs to gain the best performance and they are loaded in background worker process when the app starts.
Steps to reproduce (see attachments 1-5, in order they presented)
1. Starting the app (MDI container)
2. Choosing User List (form with single grid) from Tree View aka menu
3. User List View is loaded
4. Closing User List View
5. PROBLEM: Nevertheless form is disposed and it's not in the RadDock tool/window collection — consumed memory amount remained the same. Looping iterations from 2 to 4, will lead to memory leak (memory amount constantly grows)!
In addition to that, I would like to point that we're using MVP in WinForms. Base Form and UserControl classes are always disposing inner objects or in terms of MVP — presenters, when Form is getting closed. Here's the Trace log:
UserListView is initialized.
UserListView is loaded.
The thread '<No Name>' (0x2304) has exited with code 0 (0x0).
UserListView is disposed.
Finally, in attachment there's a screen from ANTS Memory Profiler.
Please advice, how we could solve this problem? We spent some time before writing to support, so please be patient with my insistence.