Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34

[branch] Алгоритм A-star (А*), оптимизация

07.02.2015, 22:32. Показов 3225. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данная тема является ответвлением темы: Алгоритм A-star (А*), оптимизация

x5reunion, Кстати,
Вместо
C#
1
public Point TileCoordinates { get; set; }
быстрее будет работать
C#
1
public Point TileCoordinates;
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2015, 22:32
Ответы с готовыми решениями:

Алгоритм A-star (А*), оптимизация
Всем привет пытаюсь допилить алгоритм Astar и подстроить его под свои нужды. Я добавил почти весь код, если вдруг кому то будет...

Dragon Branch
Здравствуйте, появилась проблема с программой Dragon Branch. В браузерах появилась реклама на всех страницах, переадресация на другие сайты...

Вместо master branch
Добрый день! подскажите пожалуйста, как можно исправить ошибку (работаю в eclipse с ruby on rails) создаю новый проект File - New...

31
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
08.02.2015, 11:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Storm23 Посмотреть сообщение
Все таки в пользу поля
у меня к свойству
Миниатюры
[branch] Алгоритм A-star (А*), оптимизация  
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.02.2015, 11:50  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
у меня к свойству
Да выяснили уже что проблема только внутри VS. Скомпилированные exe-шники ведут себя примерно одинаково.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 13:47
Storm23, мне приснилось одно возможное разумное объяснение - оба наших теста обладают недостатком, а именно - они обращаются к одому участку памяти. В результате данные достаточно быстро попадают в кэш и обращения к полям и свойствам не происходит вообще. Это надо тоже затестить.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 14:30
Вот, попробовал его обойти, что у вас с этим кодом получится?
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
        static int N = 100, M = 100, K = 100;
        static readonly Random Rand = new Random();
        static readonly HashSet<int> Indices = new HashSet<int>();
 
        private static Foo[] _test;
        static void Main()
        {
 
            Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
            Thread.CurrentThread.Priority = ThreadPriority.Highest;
            Console.WriteLine("Версия фреймворка = {0}", Environment.Version);
            Console.WriteLine("64 бит = {0}", Environment.Is64BitProcess);
            Console.WriteLine("ОС = {0}", Environment.OSVersion);
            Console.WriteLine("Количество логических процессоров = {0}", Environment.ProcessorCount);
            Console.WriteLine("N = {0}, M = {1}, K = {2}", N, M, K);
 
            Console.WriteLine("Выберите, Enter - полный тест, другая клавиша - сокращенный");
            bool full = Console.ReadKey().Key == ConsoleKey.Enter;
 
            int length = full ? 1024*1024*1024/IntPtr.Size : 1024*1024*128/IntPtr.Size;
            _test = new Foo[length];
 
            if (!full)
            {
                M /= 10;
            }
 
            unchecked
            {
                int trash = 0;
                Stopwatch sw1 = new Stopwatch(), sw2 = new Stopwatch();
                for (int i = 0; i < N; i++)
                {
                    for (int j = 0; j < M; j++)
                    {
                        Console.WriteLine("Тест выполнен на {0:p}", (double) (i*M + j)/(N*M));
                        if (j % 2 == 0)
                        {
                            trash += Test(sw1, true);
                            trash += Test(sw2, false);
                        }
                        else
                        {
                            trash += Test(sw2, false);
                            trash += Test(sw1, true);
                        }
                    }
                }
                Console.WriteLine(trash);
                Console.WriteLine("Время доступа к свойству = {0}", sw1.Elapsed);
                Console.WriteLine("Время доступа к полю = {0}", sw2.Elapsed);
                Console.WriteLine("Разница между ними составляет {0:P} в пользу {1}", Math.Abs(1 - sw1.ElapsedTicks / (double)sw2.ElapsedTicks), sw1.Elapsed < sw2.Elapsed ? "Свойства" : "Поля");
            }
        }
 
        public static int Test(Stopwatch sw, bool testProp)
        {
            while (Indices.Count < K)
            {
                int index = Rand.Next(_test.Length);
                Indices.Add(index);
                _test[index] = new Foo(index, index);
            }
 
            int trash = 0;
            sw.Start();
            if (testProp)
            {
                foreach (int k in Indices)
                {
                    _test[k].A += k;
                    trash += _test[k].A;
                }
            }
            else
            {
                foreach (int k in Indices)
                {
                    _test[k].B += k;
                    trash += _test[k].B;
                }
            }
 
            sw.Stop();
 
            foreach (int i in Indices)
            {
                _test[i] = null;
            }
            Indices.Clear();
 
            GC.Collect();
            return trash;
        }
    }
 
    class Foo
    {
        public int A { get; set; }
        public int B;
 
        public Foo(int a, int b)
        {
            A = a;
            B = b;
        }
    }
}
Вложения
Тип файла: rar testnew.rar (2.3 Кб, 5 просмотров)
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.02.2015, 16:13  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Вот, попробовал его обойти, что у вас с этим кодом получится?
В вижлстудии в Release - 29% в пользу поля
Да я не думаю что тут дело в кеше. Мне все же кажется что инлайнинг свойства почему-то не происходит. И время доступа к свойству увеличивается именно из-за лишних перевызовов методов.
Миниатюры
[branch] Алгоритм A-star (А*), оптимизация  
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 16:15
Storm23, ты уверен, что не в дебаге запускаешь? (запуск без дебага - ctrl+F5)
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.02.2015, 16:31  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
ты уверен, что не в дебаге запускаешь?
Да, уверен. А у тебя под дебагом какой результат показывает?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 17:25
Storm23, под дебагом (версия релиз, но это не влияет) у меня результаты совпадают с твоими:



Так что разница из-за того, что ты так или иначе запускаешь под дебагом, в релизной версии JIT'er удалит лишние вызовы.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.02.2015, 17:33  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
Так что разница из-за того, что ты так или иначе запускаешь под дебагом,
Мистика
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 17:37
Storm23, у тебя после окончания работы появляется надпись "Для продолжения нажмите любую клавишу . . ." или окно просто закрывается?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
08.02.2015, 17:56  [ТС]
Psilon, Под дебагом - закрывается, без дебага - "Для продолжения нажмите любую клавишу . . ."
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.02.2015, 19:39
Storm23, в общем, склонен предположить, что это аномалия в твоих специфических условиях (2010 студия + семерка + венера вошла в стрельца и т.п.), потому что если экзешник у тебя отрабатывает нормально (а ты говорил, что в нем отличий нет) - то виновата студия. JIT'тер на твоем компе просто не оптимизирует вызов методов getvalue/setvalue. In normal case всё будет работать нормально с одинаковой скоростью.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2015, 19:39

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии &quot;оптимизатора&quot; в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Алгоритм и его оптимизация
Проблемы с воображением ((( Нужно написать программу а потом её как либо оптимизировать что бы при сравнении получившиеся программ в...

Оптимизация, алгоритм не проходит по времени
Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий: 1) a1 &lt; a2...

Оптимизация функции (Генетический алгоритм)
Задание вот такое: Дана следующая функция: 1. Провести оптимизацию заданной функции в Matlab (с помощью генетического алгоритма): найти...

Оптимизация расшифровки файла | алгоритм хаффмана
Привет, форумчани! Собственно сразу к вопросу. У меня имеется зашифрованный файл весом 390 КБ и считывание (расшифровка) в режиме debug ...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru