С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Studio
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
1

Профили компиляции

11.03.2015, 17:48. Показов 843. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема состоит вот в чем:
Я написал две программы. Одну на Java, вторую на C# с абсолютно одинаковым содержимым, чтобы просто сравнить производительность. Результаты были удивительными. После этого я обратился к преподавателю, чтобы выяснить, в чем дело (шарповский код выполнялся в 8 (!!!) раз дольше). На его машине (VS 2008) он переключил с Debug на Release в студии, после чего время выполнения программы сократилось в 3 раза. Я пришел домой и тот же трюк не сработал (VS 2013). В общем, ищу совета по профилям в Visual Studio. Как "включить оптимизацию"?
Вот сам код на обоих языках, если кому интересно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace BoxingTest
{
    public abstract class BoxedVal
    {
        public abstract BoxedVal Add(BoxedVal other);
        public abstract bool LessThan(BoxedVal other);
        public abstract bool GreaterThan(BoxedVal other);
    }
 
    public class BoxedInt : BoxedVal
    {
        public int Value;
 
        public BoxedInt(int value)
        {
            Value = value;
        }
 
        public override BoxedVal Add(BoxedVal other)
        {
            BoxedInt i = other as BoxedInt;
            return new BoxedInt(Value + i.Value);
        }
 
        public override bool LessThan(BoxedVal other)
        {
            BoxedInt i = other as BoxedInt;
            return Value < i.Value;
        }
 
        public override bool GreaterThan(BoxedVal other)
        {
            BoxedInt i = other as BoxedInt;
            return Value > i.Value;
        }
    }
 
    class Program
    {
        private static int Fib(int nn)
        {
            BoxedVal one = new BoxedInt(1);
 
            BoxedVal a = one;
            BoxedVal b = one;
 
            BoxedVal n = new BoxedInt(nn);
 
            BoxedVal thousand = new BoxedInt(1000);
 
            for (BoxedVal i = new BoxedInt(2); i.LessThan(n); i = i.Add(one))
            {
                BoxedVal c = a.Add(b);
                a = b;
                b = c;
 
                if (b.GreaterThan(thousand))
                {
                    a = one;
                    b = one;
                }
            }
            return (b as BoxedInt).Value;
        }
 
        static void Main(string[] args)
        {
            int times = 5;
            int n = 20000000;
 
            int total = 0;
 
            for (int i = 0; i < times; i++)
            {
                var start = DateTime.Now;
                int val = Fib(n);
 
                int dt = (DateTime.Now - start).Milliseconds;
                total += dt;
                Console.WriteLine(val);
                Console.WriteLine("Elapsed: {0} ms", dt);
            }
 
            Console.WriteLine("Average: {0} ms", total / times);
 
            Console.ReadLine();
 
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
abstract class BoxedVal
{
    public abstract BoxedVal Add(BoxedVal other);
    public abstract boolean LessThan(BoxedVal other);
    public abstract boolean GreaterThan(BoxedVal other);
}
 
 
class BoxedInt extends BoxedVal
{
    public int Value;
 
 
    public BoxedInt(int value)
    {
        Value = value;
    }
 
    @Override
    public BoxedVal Add(BoxedVal other)
    {
        BoxedInt i = (BoxedInt)other;
        return new BoxedInt(Value + i.Value);
    }
 
    @Override
    public boolean LessThan(BoxedVal other)
    {
        BoxedInt i = (BoxedInt)other;
        return Value < i.Value;
    }
 
    @Override
    public boolean GreaterThan(BoxedVal other)
    {
        BoxedInt i = (BoxedInt)other;
        return Value > i.Value;
    }
}
 
public class BoxingTest {
 
    private static int Fib(int nn)
    {
        BoxedVal one = new BoxedInt(1);
 
        BoxedVal a = one;
        BoxedVal b = one;
 
        BoxedVal n = new BoxedInt(nn);
 
        BoxedVal thousand = new BoxedInt(1000);
 
        for (BoxedVal i = new BoxedInt(2); i.LessThan(n); i = i.Add(one))
        {
            BoxedVal c = a.Add(b);
            a = b;
            b = c;
 
            if (b.GreaterThan(thousand))
            {
                a = one;
                b = one;
            }
        }
        return ((BoxedInt)b).Value;
    }
 
    public static void main(String[] args) {
 
        int times = 5;
        int n = 20000000;
 
        long total = 0;
 
 
        for (int i = 0; i<times;i++){
            long start = System.currentTimeMillis();
 
            int val = Fib(n);
            long dt = System.currentTimeMillis() - start;
            total+= dt;
            System.out.println(val);
            System.out.println("Elapsed: "+dt+" ms");
        }
 
        System.out.println("Average: "+(total/times)+" ms");
 
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.03.2015, 17:48
Ответы с готовыми решениями:

Профили
Здравствуйте подскажите что. У сотрудника завис компьютер, он его перезагрузил заходит в свою...

Профили пользователей
У меня на работе такая ситуация, 25 компов, сервер под упр Windows NT Server 4, раб станции Windows...

Профили пользователей
Здравствуйте. Столкнулся с такой проблемой что, раньше работал под админом, то есть настроил...

Не отображаются профили wi-fi
Столкнулся с таким глюком: в Управлении Беспроводными Сетями не отображаются профили wi-fi. На...

2
Администратор
Эксперт .NET
9628 / 4778 / 762
Регистрация: 17.04.2012
Сообщений: 9,627
Записей в блоге: 14
11.03.2015, 18:43 2
Цитата Сообщение от nobless1368 Посмотреть сообщение
Как "включить оптимизацию"?
В настройках проекта либо поменять активную конфигурацию на Release, либо отдельно поставить флажок "Оптимизировать код" (лучше первое).
Миниатюры
Профили компиляции  
0
14 / 14 / 2
Регистрация: 04.06.2012
Сообщений: 124
Записей в блоге: 1
11.03.2015, 18:56  [ТС] 3
Я уже все это сделал, но практически никаких изменений не произошло (300 мс вместо 350 в среднем, в то время как при компиляции на компе преподавателя с 400+ до 100- мс). Я кстати отключил определение DEBUG и TRACE, поставил флажок на оптимизацию и на "Предпочитать 32-разрядную сборку" (кстати, что очень странно, это дало небольшой прирост, хотя процессор и система х64). Общая картина, к сожалению, так и не поменялась.
0
11.03.2015, 18:56
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2015, 18:56
Помогаю со студенческими работами здесь

Профили пользователей
Здравствуйте, подскажите, как создать несколько идентичных пользователей с одинаковыми профилями...

Профили пользователей
Приветствую. Подскажите вопрос. Был компьютер, не в домене, тихо мирно работала тётенька и все...

Профили пользователей
Подскажите как скопировать профиль пользователя на другой, в ХР и Vista было просто выбираешь...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru