ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Результаты опроса: как вы пишите?
1-ый вариант 11 28.21%
второй 28 71.79%
Голосовавшие: 39. Вы ещё не участвовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме Опции просмотра

посмотрел...
  #11  
Старый 07.05.2009, 20:21
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию посмотрел...

результат под запуском профайлера:


результат профайлера:


используемый код:
PHP код:
using System;
using System.Collections.Generic;

namespace 
ConsoleApplication1
{
    class 
Program
    
{
        private const 
int MaxLength 100000;

        private static 
readonly List<int> list = new List<int>();

        static 
void GetList()
        {
            
int i 0;
            while (
MaxLength)
            {
                list.
Add(i);
                
i++;
            }
        }

        static 
DateTime Method1()
        {
            for (
int i 0< list.Counti++)
            {
                
int a;
                
100;
                
int b >> << 3;
            }
            return 
DateTime.Now;
        }

        static 
DateTime Method2()
        {
            
int size = list.Count;
            for (
int i 0sizei++)
            {
                
int a;
                
100;
                
int b >> << 3;
            }
            return 
DateTime.Now;
        }

        static 
void Main()
        {
            
GetList();
            var 
DateTime.Now;
            
Console.WriteLine(string.Format("Method 1. Time elapsed: {0}", (Method1() - a)));
            
DateTime.Now;
            
Console.WriteLine(string.Format("Method 2. Time elapsed: {0}", (Method2() - a)));
            
Console.ReadLine();
        }
    }

надеюсь я не тупанул, хотя как оговаривалось ранее, все зависит от реализации используемого объекта.

p.s. было интересно, а будет-ли разница? Оказалось есть.

Проц Core2Duo E8400
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 07.05.2009 в 20:27..
 
Ответить с цитированием

  #12  
Старый 07.05.2009, 22:42
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от W!z@rD  

надеюсь я не тупанул, хотя как оговаривалось ранее, все зависит от реализации используемого объекта.

p.s. было интересно, а будет-ли разница? Оказалось есть.
В примере топикстартера используется метод someshit.count(); , а не свойство, как у тебя.
В твоем примере разница между вызовом свойства и локальной переменной - минимальна.
А вот если count() - это метод, со сложной внутренней реализацией, то разница будет намного большей.

PS
Да, и использованный тест не очень показателен. Нужно что бы время выполнения было хотя бы несколько секунд. Разница в 3 сотых - вполне может быть случайной. Особенно в дотнете.
 
Ответить с цитированием

  #13  
Старый 07.05.2009, 23:07
fucker"ok
Познавший АНТИЧАТ
Регистрация: 21.11.2004
Сообщений: 1,137
Провел на форуме:
2487541

Репутация: 761


По умолчанию

Цитата:
по-моему такого вообще не должно быть, должна быть переменная Size, которая обновляется сама собой.
В том то и дело, что как правило внутри класса есть такая переменная, но почему-то во многих фреймворках, например в QT делается так, что все свойства закрытые, а доступ к ним получаем через методы.
Довольно часто можно встретить такое:
Код:
class a
{
public:
    int count() {   return size;}
private:
    int size;
};
 
Ответить с цитированием

  #14  
Старый 08.05.2009, 00:19
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Цитата:
Сообщение от fucker"ok  
В том то и дело, что как правило внутри класса есть такая переменная, но почему-то во многих фреймворках, например в QT делается так, что все свойства закрытые, а доступ к ним получаем через методы.
На данный момент, доступ к переменным через геттеры/сеттеры - стандарт. (И это действительно оправдано)

З.Ы.
Если не понятно почему, то во первых чтобы со стороны никто не мог внезапно изменить данное поле (в случае public ты можешь записать левое значение в переменную size и класс об этом не узнает, чем черевато - понятно), а так ты можешь сделать поле доступным извне только на чтение, или только на запись, во вторых если требуется изменить внутреннюю структуру класса и удалить/переименовать эту переменную, чтобы не требовалось искать всех пользователей класса, и менять их. (Просто достаточно будет изменить реализацию геттеров/сеттеров, тогда интерфейс класса останется неизменным). Вот по крайней мере 2 плюса использования геттеров сеттеров.

Ну ещё можно при помощи изменения геттеров подгонять объекты под требования пользователя класса, или добавлять в них проверки ввода, но сложная логика в геттерах/сеттерах - не клёво и неправильно.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.

Последний раз редактировалось Qwazar; 08.05.2009 в 00:52..
 
Ответить с цитированием

  #15  
Старый 08.05.2009, 01:08
Frimen
Новичок
Регистрация: 07.05.2009
Сообщений: 1
Провел на форуме:
14325

Репутация: 0
По умолчанию

Проголосовал за 1-й вариант, потом вдумался и пришёл к выводу что пишу всё-же по второму варианту.

В принципе если метод count() имеет какую то сложную реализацию то это существенно скажется на производительность.
 
Ответить с цитированием

  #16  
Старый 08.05.2009, 01:18
fucker"ok
Познавший АНТИЧАТ
Регистрация: 21.11.2004
Сообщений: 1,137
Провел на форуме:
2487541

Репутация: 761


По умолчанию

Цитата:
Если не понятно почему, то во первых чтобы со стороны никто не мог внезапно изменить данное поле (в случае public ты можешь записать левое значение в переменную size и класс об этом не узнает, чем черевато - понятно),
Как-то не подумал об этом. Действительно, это страхует.
 
Ответить с цитированием

  #17  
Старый 08.05.2009, 07:35
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

Цитата:
Сообщение от Algol  
В примере топикстартера используется метод someshit.count(); , а не свойство, как у тебя.
В твоем примере разница между вызовом свойства и локальной переменной - минимальна.
А вот если count() - это метод, со сложной внутренней реализацией, то разница будет намного большей.

PS
Да, и использованный тест не очень показателен. Нужно что бы время выполнения было хотя бы несколько секунд. Разница в 3 сотых - вполне может быть случайной. Особенно в дотнете.
хм так и знал что глупость сделал, но думаю это можно решить если использовать LINQ запрос.
вечером как окажусь дома переделаю...
думаю будет нагляднее.


update:
не выдержал, проверил с LINQ на работе, результат без профайлера:
Method 1. Time elapsed: 00:00:00.0468753
Method 2. Time elapsed: 00:00:00

update2:
с профайлером:
Method 1. Time elapsed: 00:00:00.0781250
Method 2. Time elapsed: 00:00:00.0156250
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...

Последний раз редактировалось W!z@rD; 08.05.2009 в 17:13..
 
Ответить с цитированием

  #18  
Старый 14.05.2009, 00:08
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

сколько раз гонялся тест? нужно минимум для каждого варианта прогнать по 10-50 раз. чтобы исключить момент подгрузки кода в кеш.
по поводу опроса - не хватает еще варианта ответа - одно***ственно. ибо потери на вызове метода, пусть даже виртуального, не окажут никакого ощутимого влияния. а лишняя локальная переменная в таком месте, объявленная вне цикла, может позже помешать вынести этот цикл в отдельный метод. так что чисто из соображений дальнейшей поддержки проекта и читабельности я бы предпочел первый вариант.

по поводу форматирования - почитайте Макконнелла.
по поводу переменных - int x = strlen("blabla") - strlen("bla"); на уровне асма будет эквивалентен коду
int blabla_len = strlen("blabla");
int bla_len = strlen("bla");
int blabla_len_dif = blabla_len - bla_len;

суть отказа от локальных переменных как раз в другом. чтобы в больших методах можно было легко читать логику. этот код например в случае нахождения в большом методе выносится в отдельный и заменяется на blabla_len_dif("blabla", "bla"); ибо это понятнее и требует меньше времени на чтения, ибо банально занимает 1 строку. ну и в добавок сей код можно в дальнейшем вызывать из любого места класса, плюс сделать метод публичным и дать другим классам с ним работать.
зы: чтите Фаулера, Макконнелла, GoF.

Последний раз редактировалось Ra$cal; 14.05.2009 в 17:20..
 
Ответить с цитированием

  #19  
Старый 14.05.2009, 01:13
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Совет: пишите так, как проще и меньше кода.
Оптимиировать надо не все подряд, а только узкие места.

Все подряд оптимизируют лишь распиздяи
 
Ответить с цитированием

  #20  
Старый 14.05.2009, 01:15
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

W!z@rD
попробуй поменять местами тесты

Цитата:
по 10-50 раз
10к-50к я бы сказал.

Последний раз редактировалось Forcer; 14.05.2009 в 01:17..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с буфером обмена в kernel-mode 0x0c0de Реверсинг 11 01.06.2009 11:51
Оптимизация сайта под поисковик Spiktorg Белые методы раскрутки 1 14.05.2009 04:22
Кейлогер на Vb или как правильно играть в Gta!!! je0n Авторские статьи 6 25.05.2007 23:55
Поиск PHP уязвимостей на примере phpBB _-[A.M.D]HiM@S-_ Статьи 1 29.10.2006 11:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ