Може ли статично разширение на класа да бъде вградено?

Имам тенденция (връщам се към дните на c++) да добавям подсказки за вграждане към малки методи, например:

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Add(this IProject @this, IComponent component)
{
    @this.Components.Add(component);
}

Чудех се дали методите за разширение на статичен клас могат да бъдат вградени на първо място?


person Meirion Hughes    schedule 17.03.2015    source източник
comment
Наистина ли имате нужда от тези микрооптимизации? Вече не са дни на C++, можете да се доверите на своя компилатор. Освен това подсказките за вграждане обикновено трябва да се поставят върху по-големи методи, които смятате, че компилаторът няма да вгради. Но резултатът вероятно е в рамките на наносекунди така или иначе.   -  person Pierre-Luc Pineault    schedule 18.03.2015
comment
Не е ли по-добре да се отървете от този навик на първо място?   -  person Ondrej Tucny    schedule 18.03.2015
comment
Въпросът все още е напълно валиден, дори и да не сме съгласни със случая на употреба.   -  person Grofit    schedule 18.03.2015
comment
Вероятно не. Но атрибутът е там, функционалността е там. Това е легитимен въпрос.   -  person Meirion Hughes    schedule 18.03.2015
comment
Защо статичните методи биха били изключени от вграждане?   -  person Blorgbeard    schedule 18.03.2015
comment
Не каза, че не е легитимен въпрос. Само че наистина трябва да преосмислите сценария си от гледна точка на поддръжката. Вероятно губите повече време в писането на един атрибут за вграждане, отколкото ще спестите през целия живот на вашата програма.   -  person Pierre-Luc Pineault    schedule 18.03.2015
comment
Стана лош навик да се поставя под въпрос преценката на разработчиците, особено когато става дума за оптимизация. Има много случаи, в които и най-малката оптимизация прави разлика. C# не е направен със същия начин на мислене като C++, но точно това е причината да искате да оптимизирате, където е възможно. Сред другите области C# сега се използва в игралната индустрия, където операциите/обажданията могат да достигат до десетки хиляди и не за секунда, а с 60, дори 90 кадъра в секунда. Благодаря ви за разбирането.   -  person mireazma    schedule 06.08.2019


Отговори (1)


Статичните методи могат да бъдат вградени. Вижте тук за информация как да проверите дали даден метод е вграден. Методите за разширение не се различават от нормалните статични методи; в IL те просто са украсени с System.Runtime.CompilerServices.ExtensionAttribute, така че ще бъдат третирани по същия начин от JIT.

person Erik    schedule 17.03.2015