2016-02-20 7 views
0

Мы разработали службы Windows с использованием потоков для использования записей базы данных (обычно .Net 2.0). Блок кода под шоу.C# Windows Threading Threading Process Улучшение производительности

for(int i=0;i<ThreadCount;i++) 
{ 
    ParameterizedThreadStart pts=new ParameterizedThreadStart(MyCode.DoWork) 
    Thread t=new Thread(pts); 
    t.Start(someObject); 
} 

ThreadCount читать app.config.MyCode.DoWork (SomeObject Object) блок кода выбора некоторых данных в сервере SQL, а некоторые operations.In дополнение мы называем зр, и запрос содержит с (уключина) против

while(someObject.Running) 
{ 
    */select some data 
} 

Главный вопрос заключается в том, как улучшить мои окна service.Some статьи, связанные с ручным увеличением создающего потока CPU стоит vs.So как улучшить мое приложение performance.If я использовать библиотеки Parallel Task принести никакой пользы. Создайте задачу, а не создавайте thread.Does. Задайте задачу для создания потока вручную, чтобы посмотреть доступный кол-во CPU или преобразовать в подобное.

for(int i=0;i<ThreadCount;i++){ 

    Task t=new Task(=>MyCode.Work()); 
} 
+0

Уверен, что здесь проблема с ЦП, так как я выгляжу как «узкое место»? Вы измеряете производительность? Для начала вы можете попробовать Parallel.For он автоматически отрегулирует количество проходов. – csharpfolk

+0

Нет проблемы с ЦП, но я пытаюсь улучшить свою производительность (иногда CPU и DB изучают программирование, из-за того, что у нас было много служб Windows, выполняющих некоторые операции db). Поскольку мы хотим как можно скорее использовать наши данные , – engcmreng

ответ

1

Для улучшения производительности вашего приложения вам необходимо выяснить, где не хватает производительности, а затем почему этого не хватает. К сожалению, мы не можем сделать это для вас, потому что ему нужен доступ к работающим C# и SQL-кодам.

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

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

+0

В частности, нет постоянной проблемы с ЦП или БД. Я хочу только улучшить свою производительность. Я знаю об этом, потому что мы работаем с данными как можно скорее. Если мы используем параллельную библиотеку при возникновении какой-либо проблемы. – engcmreng

+0

Если нет проблемы с ЦП или базой данных, тогда где код медленный? – RoadWarrior

+0

Мне интересно, если я обработаю около 5 минут некоторые данные, как уменьшить до 3,5 минут. – engcmreng

0

, чтобы сделать вещи проще и при условии, что служба Windows является единственным клиентом, обращающимся к базе данных. 1. попытайтесь получить доступ к базе данных из одного потока. это уменьшает конфликты блокировок на таблицах db, предполагая, что есть конкуренция в доступе к данным. 2. Поместите полученные данные в очередь и попросите задачи TPL обрабатывать данные, чтобы использовать все ядра ЦП, при условии, что ваша горловина с производительностью - это cpu 3. а затем купите столько ядра процессора, сколько вы можете себе позволить.

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