Jawad Ahmed Tanoli Ответов: 0

Приложение работает медленно после использования telerik controls windows application


Приложение работало совершенно нормально без каких-либо проблем с памятью или зависанием с элементами управления Win,использующими C#, Entity Frame Work 4.5 и Sql Server 2012 в клиентской системе.

мы преобразуем приложение в элементы управления Telerik после этого опыт был не очень хорошим.

1) Сначала он слишком много использует память, а через некоторое время показывает исключение из памяти.
Для этого на каждом событии закрытия формы мы использовали этот код класса.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           MemoryManagement.FlushMemory();
       }




после использования этого кода проблема исключения нехватки памяти исчезла.Но мы все еще сталкиваемся с тем, что через несколько часов приложение застревает, но в Диспетчере задач оно показывает нормальную память, не используя проблему зависания, но мы пытаемся использовать приложение, оно работает очень медленно, даже мы пытаемся писать в текстовом поле, оно пишет очень медленно.
Пожалуйста, предложите какое-нибудь решение :)

Что я уже пробовал:

public class MemoryManagement
   {
       [DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet =
           CharSet.Ansi, SetLastError = true)]

       private static extern int SetProcessWorkingSetSize(IntPtr process, int minimumWorkingSetSize, int
       maximumWorkingSetSize);

       public static void FlushMemory()
       {
           GC.Collect();
           GC.WaitForPendingFinalizers();
           if (Environment.OSVersion.Platform == PlatformID.Win32NT)
           {
               SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
           }
       }
   }

Thomas Nielsen - getCore

Вы не должны вручную обрабатывать память (почти) когда-либо в CLR, когда вы делаете GC.Collect() ваша среда выполнения заморозит все процессы во время компиляции дерева зависимостей для объектов (чтобы увидеть, ссылаются ли они все еще из активного пользовательского пространства или могут быть восстановлены)
Что вы должны сделать, так это убедиться, что все одноразовые элементы управления будут удалены, когда вы сформируете close или вам придется ждать, пока поток GC не обнаружит, что вы не используете объекты, иметь прослушиватель событий, который вы забыли где-то отсоединить, и это никогда не произойдет!
Я думаю, что будет хорошей идеей добавить код, который на самом деле терпит неудачу, а не вашу обходную работу, пытаясь смягчить то, что, вероятно, будет проблемой в шаблоне использования. Если действительно есть проблема с памятью с элементами управления Telerik, сообщите им об этом, они, по-видимому, уделяют огромное внимание тому, чтобы оставаться актуальными для своих клиентов, производя качество.

Jawad Ahmed Tanoli

Спасибо за ответ, я удаляю вручную класс MemoryManagement и тестирую его снова .

Richard Deeming

Элементы управления Telerik являются коммерческими компонентами, так что, по-видимому, они поставляются с поддержкой?

Элементы управления не являются открытым исходным кодом, поэтому единственные люди, которые могут исправить проблемы с ними, - это Telerik.

0 Ответов