Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 56

Как увеличить производительность программы?

30.07.2012, 08:59. Показов 5973. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток) Ранее я думал, что многопоточность программы увеличивает ее скорость, но ошибался.. (тоже, смотря что делать.. если скачивать что-то из инета, то явно увеличит)

Моя программа обрабатывает информацию, я хотел увеличить ее производительность. Добавил потоки, но скорости дополнительной не придало. А дело в том, что процессор имеет 4 ядра, а использует всего 1, на скока я понимаю. Так вот как задействовать все?

И как можно увеличить скорость еще? - ну упростить код, обработку сделать проще.. это само собой.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2012, 08:59
Ответы с готовыми решениями:

Увеличить производительность программы
Вкратце, у меня есть программа, она работает с большим количеством информации, мне необходимо, чтобы прога все БЫСТРЕЕ считала (Может...

Как искуственно увеличить размер программы?
Ув. гуру. Подскажите, пожалуйста, как сделать размер приложения больше по размеру? Вроде как можно создать сгенерировать на PHP...

Как увеличить скорость работы программы?
Всем привет! Программа проходит 6/8 тестов (тесты неизвестны), а на последние 2 превышен лимит времени. Прошу помощи. Задача: ...

11
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.07.2012, 09:02
Превое, что нужно сделать - узнать где затык, какой кусок кода тормозит больше всего.
Это можно сделать с помощью профайлера. В VS2010 ultimate есть встроенный, или можно использовать сторонний, например dotTrace.
1
2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 56
30.07.2012, 09:45  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Превое, что нужно сделать - узнать где затык, какой кусок кода тормозит больше всего.
Это можно сделать с помощью профайлера. В VS2010 ultimate есть встроенный, или можно использовать сторонний, например dotTrace.
затык сразу скажу где. это отправка post к серверу (большой пост просто)
А как узнать, как работает программа, в 1 ядре все выполняется или все задействованы.
И как задействовать все?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.07.2012, 09:51
При использовании потоков, если они действительно работают параллельно и нагружают процессор, то будут использоватся больше чем одно ядро.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
30.07.2012, 09:55
А разве процессор сам не делит процессы между собой?
А многопоточность нужна по-моему что бы не отрывать юзера от главного окна и не давать ему лишней инфы.
0
2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 56
30.07.2012, 10:00  [ТС]
Те уже все сделано за меня, я вот смотрю в дисп задач, все ядра пашут.. Спасибо.

Буду значит анализировать, что в коде медленно работает. Просто рассчитывал увеличить время обработки, но этого не случилось (может потому что я много потоков запустил, 10 штук.)

Когда запускал в 1 поток, то всю работу он заканчивал за 2-2.5 часа. Сейчас в 10 он пашет по моему с точ такой же скоростью. И у меня подозрение, что он не параллельно делает, а попеременно. те сделал какой то кусочек в 1 потоке, потом на доли сек переключился на другой поток, там чуть сделал.. и так крутится (но никак не параллельно..)

Добавлено через 2 минуты
Цитата Сообщение от Noob.net Посмотреть сообщение
А разве процессор сам не делит процессы между собой?
А многопоточность нужна по-моему что бы не отрывать юзера от главного окна и не давать ему лишней инфы.
Я просто не знал об этом. Вот и спросил, конечно предварительно почитав какую то статейку. В ней было сказано, что многопоточность никак не увеличивает скорость программы. (в некоторых случаях тока увеличивает)
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
30.07.2012, 10:04
Процессор так и работает.Переключается с одного потока на другой,но глазом ты это не заметишь.
А если все будет плохо подключит второе ядро)
//Иллюзия из-за того що теперь задачу выполняют 2 процесса
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.07.2012, 10:05
Цитата Сообщение от Noob.net Посмотреть сообщение
А разве процессор сам не делит процессы между собой?
Только не процессор, а ОС.
Цитата Сообщение от trolol Посмотреть сообщение
В ней было сказано, что многопоточность никак не увеличивает скорость программы.
Все зависит от кода, и от того над какими данными потоки работают. Если данные никак не зависимы(слабо зависимы), то прирост будет.
0
2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 56
30.07.2012, 10:14  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Все зависит от кода, и от того над какими данными потоки работают. Если данные никак не зависимы(слабо зависимы), то прирост будет.
Данные хранятся в тхт файлах, я по отдельности открываю каждый и с помощью регулярок вытаскиваю данные, после чего их отправляю на php скрипт. который в свою очередь эти данные тоже обрабатывает и отправляет ответ проге

те еще сервер должен достаточно быстро отвечать. Но многопоточная отправка на сервер быстрее, чем однопоточная
0
 Аватар для SandWraith
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
30.07.2012, 10:31
Цитата Сообщение от Noob.net Посмотреть сообщение
Процессор так и работает.Переключается с одного потока на другой,но глазом ты это не заметишь.
А если все будет плохо подключит второе ядро)
Планировщики задач большинства операционок сразу подключат все ядра, а не "кодга все будет плохо". И перекинет он на другое ядро другие потоки в соответствие с их приоритетами.
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
30.07.2012, 13:15
1) Если файлы не большие сделай отображение всех текстовых файлов в память сразу при запуске чтобы не обращаться к винту
2) воспринимай текстовой файл как 1 большую строку
3) оптимизируй regEx выражения с учетом пункта 1 и 2, используй MatchCollection
4) запускай все потоки через ThreadPool
5) используй асинхроные операции
6) замени php скрипт WCF или Web сервисом, т. к. обработка php - скриптом может тормозить твою программу

P. S. а еще неплохо бы увидить твой код
0
2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 56
30.07.2012, 14:11  [ТС]
Цитата Сообщение от агерон Посмотреть сообщение
1) Если файлы не большие сделай отображение всех текстовых файлов в память сразу при запуске чтобы не обращаться к винту
2) воспринимай текстовой файл как 1 большую строку
3) оптимизируй regEx выражения с учетом пункта 1 и 2, используй MatchCollection
4) запускай все потоки через ThreadPool
5) используй асинхроные операции
6) замени php скрипт WCF или Web сервисом, т. к. обработка php - скриптом может тормозить твою программу

P. S. а еще неплохо бы увидить твой код
Спасибо за столь широкий ответ, чуть поже я отредактирую код (просто сейчас работает в режиме отладки) и покажу, что я примерно делаю.

1) файлы размером в среднем 100-150 кб
4) потоки я запускаю вот так
C#
1
2
Thread parse_1 = new Thread(parse1);
parse_1.Start();
5) асинхронные операции задействую в отправке запроса к серверу, если честно до этого не использовал, сейчас подробнее поизучаю
6) та не особо торопимся, хотя его стоит тоже оптимизировать, а то я там понаписал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2012, 14:11
Помогаю со студенческими работами здесь

Как увеличить производительность
Докупал кингстон 2ГБ, тоже 1333МГц. Какую нужно докупить планку а может лучше две чтобы повысить мощьность производительности компьютера? ...

Как увеличить производительность компьютера?
Как увеличить производительность компа? CPU - Intel Celeron 2.1GHz (разгоняю до 2.5) Видюха - ATI Radeon X1650 Series и ATI Radeon...

Как бюджетно увеличить производительность?
Доброго времени суток. Представляю вашему вниманию свою сборку домашнего ПК. Материнская плата: ASRock N68C-GS FX ЦП: HexaCore AMD...

Как увеличить производительность проца?
какие способы существуют? виртуально, а не физически Добавлено через 2 минуты КАК РАЗОГНАТЬ? Добавлено через 5 минут я так...

Как увеличить производительность работы?
Чтобы делать дела больше и быстрее?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru