2014-01-16 2 views
-1

Привет всем, у меня есть довольно простой вопрос, у меня есть многопоточное приложение, которое используется для выполнения периодических сетевых обновлений. У меня есть форма mainForm и одна CustomuserControl чтобы показать сетевые обновления сейчас на нашем mainForm, у нас есть кнопка, и на этой кнопке мы можем добавить столько CustomUSerControls, сколько хотим, но оно потребляет слишком много памяти и процессора, и когда я просматриваю анализатор производительности, тот, который включен в визуальный студия она показывает мне, чтоWINDOWSFORMAPPLICATIONBASE.RUN (STRING()) Слишком много использования процессора

MICROSOFT.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(string()) 

этот метод принимает почти 70-80 использования процессора я не знаю, за то, что он занимает слишком много памяти может любой объяснить это пожалуйста

ответ

1

У вас есть цикл в вашем пользовательском интерфейсе, который постоянно что-то делает и использует CPU.

Проверяйте, что вы делаете, и помещаете паузы в опрос или изменяете его на систему, основанную на событиях, которая обрабатывает информацию только тогда, когда ваш класс получает сигнал о наличии информации для обработки.

Если вы уже слушаете какое-либо событие, но событие очень часто запускается, вам может потребоваться найти способ уменьшить количество запущенных событий или обработать обработчик событий только после того, как прошло достаточно времени.

К сожалению, я не могу более точно определить это, не видя точного кода, вызывающего медлительность вашего кода. Я рекомендую использовать профилировщик кода, чтобы найти, какие строки вашего кода (строка, которую вы показали нам, представляет собой .NET-код, не так много, что вы можете с этим сделать) больше всего называют и выясняют, как их оптимизировать.

+0

ОК спасибо за ваше время и ценный ответ, я должен постоянно проверять сетевые обновления, и я не могу дождаться сигнала из-за некоторых требований, а также вы правы. У меня есть делегат, который устанавливает некоторые текстовые свойства и сохраняет некоторые info, так что дело в том, что проблема находится где-то еще не в методе выше упоминания –

1

Во-первых, вы можете попробовать использовать уаг р = System.Diagnostics.Process.Start (...)

(Вы можете ждать завершения процесса с использованием р)

код позади является более простым и быстрее, чем метод, который вы описываете.

Другой вариант, если ваш автоматический запуск сетевых приложений также приложение .NET, у вас есть свой источник:

1) разделить приложение сети на две части: загрузчик (файл с расширением .exe) и переместите метод сетевого обновления в DLL-файле (добавление проекта библиотеки в ваше решение и метод переноса обновлений, используемые исходные файлы в этот новый проект библиотеки).

2) добавьте ссылку на проект библиотеки как в загрузке сетевого приложения, так и в приложении Form.

3) из приложения Form: не запускайте загрузчик сетевого приложения, но напрямую вызывайте метод сетевого обновления в проекте библиотеки.

С помощью этого второго метода приложение формы должно загружать только DLL (гораздо быстрее, чем запуск нового приложения каждый раз, когда требуется обновление сети).

Смежные вопросы