Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инлайн C# 
V
    Опции темы
NightmareZ
Дата 27.12.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Два куска кода:
Код

using System;

namespace ConsoleApplication2
{
    public static class Ex
    {
        public static int Add(this int i, int j)
        {
            return i + j;
        }

        public static int Sub(this int i, int j)
        {
            return i - j;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int m = 0;

            for (int i = 0; i < 10000; i++)
            {
                for (int j = 0; j < 10000; j++)
                {
                    for (int k = 0; k < 5; k++)
                    {
                        m += (i - (j + k));
                        //m = m.Add(i.Sub(j.Add(k)));
                    }
                }
            }

            Console.WriteLine(m);
            Console.ReadLine();
        }
    }
}


Код

using System;

namespace ConsoleApplication2
{
    public static class Ex
    {
        public static int Add(this int i, int j)
        {
            return i + j;
        }

        public static int Sub(this int i, int j)
        {
            return i - j;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int m = 0;

            for (int i = 0; i < 10000; i++)
            {
                for (int j = 0; j < 10000; j++)
                {
                    for (int k = 0; k < 5; k++)
                    {
                        //m += (i - (j + k));
                        m = m.Add(i.Sub(j.Add(k)));
                    }
                }
            }

            Console.WriteLine(m);
            Console.ReadLine();
        }
    }
}

Почему первый работает быстрее? Почему JIT-компилятор не инлайнит функции? Компилял в релизе под 2008 студией.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
tol05
Дата 28.12.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



а почему компилятор должен инлайнить функции? smile

насколько я знаю, в .Net инлайнятся только константы и литералы. 
К тому же, методы компилируются JIT-ом в свои участки памяти, Add, Sub и Main - каждый в свой собственный.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
stab
Дата 28.12.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 7
Всего: 48



если вот так записать, то инлайнит:
Код

int temp = j.Add(k);
m = m.Add(i.Sub(temp));


-1 джитеру smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mr.DUDA
Дата 28.12.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Что-то я туплю... Ключевое слово "this" перед аргументом i для чего ?


--------------------
user posted image
PM MAIL WWW   Вверх
QryStaL
Дата 28.12.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Это в C# 3.0 появилось - Extension methods. Если вкратце - в данном случае у типа int появляется 2 "дополнительных" метода: Add и Sub.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
tol05
Дата 28.12.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



мда... я тоже протупил. Только начал третий FW изучать... 
Мда, похоже компилятор значительно изменился, а я пока являюсь "источником устаревшей информации"  smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
QryStaL
Дата 28.12.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 10
Всего: 32



Если кому интересно, ссылка.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
mr.DUDA
Дата 28.12.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Может потому и не инлайнит, что это не обычный метод ? smile


--------------------
user posted image
PM MAIL WWW   Вверх
stab
Дата 28.12.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 7
Всего: 48



mr.DUDA, да не, джитер тупит просто. обычные подрихтованые статические методы + новый синтаксис. кому сахорок? налетай! smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.