Професионална програма
Loading...
+ Нов въпрос
milen8204 avatar milen8204 296 Точки

[Homework] КПК - Бързодействие и оптимизация на кода

Здртавейте,

Написах някакво домашно и искам да го споделя. Естествено да бъде укорено...

Problem 1. Clean the Smelly Code:

По тази задача, просто намерих някакъв "bottleneck" и изкарах една стойност от един фоцикъл и основно това съм направил.

Скрийн шот преди оптимизацията; Скрийн шот след оптимизацията;

Problem 2. Operations Performance Tests

Направил съм два класа, в едини тъпча методи, които вършат нещата по заданието, а другия принтва резултатите. Направил съм метод, който приема два стринга като параметри, единия е тип (int, long, float, ...), а другия за желано действие (add, subtract, increment, ...).  Използвал съм две променливи тип dynamic и с един swich връщам към динамика съответния тип :) После с друг swich в зависимост от действието го изпълнявам в един форцикъл с двете променливи. По подобен начин съм направил и за другите задачи, като за сортирането съм използвал масив от ICompareble за тестване на съответния тип сорт. Не знам дали го обясних добре за това ето и кода :):

клас с решение; клас за тест;

Малко ми е "хакерско" решението и бих се радвал да разгледам и други.

 

 

5
C# OOP Advanced 10/12/2014 00:52:30
HPetrov avatar HPetrov 822 Точки

От 2-рия ти screenshot доста добро намаляне на натовареността вади. При мен обаче не се получи такова рязко скачане в началото и постепенно намаляне. По-скоро съвсем леко скачане и после плавно си продължава. Може и процесора да ми е по-добър знае ли човек... Профайлера като резултат показваше че 99.9% от натовареността идва само и единствено от Main метода, което е добре. Махнах целия цикъл дето е в EarthRotation метода и step-а го смених на 360, което са градусите, които завърта за цял ден.

Домързя ме да направя screenshots признавам :)

1
milen8204 avatar milen8204 296 Точки

        private void EarthRotation()
        {
            var dasysForPeriod = Days / EarthRotationPeriod;
            for (decimal step = 0; step <= 360; step+=0.00005m)
            {
                EarthRotationAngle = ((double)step) * dasysForPeriod;
            }
            Update("EarthRotationAngle");
        }

 

това ми е оптимизирането на действието.

3
XmUrF avatar XmUrF 363 Точки

Аз лично на тази задача само смених decimal на double и общо взето си заработи доста добре.

3