<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии на: Декораторы.</title>
	<atom:link href="http://roinet.net/2009/03/30/decorators/feed/" rel="self" type="application/rss+xml" />
	<link>http://roinet.net/2009/03/30/decorators/</link>
	<description>Блог о программировании, алгоритмах и технологиях.</description>
	<lastBuildDate>Fri, 13 Aug 2010 09:39:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>От: Roinet</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3494</link>
		<dc:creator>Roinet</dc:creator>
		<pubDate>Wed, 17 Jun 2009 14:38:34 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3494</guid>
		<description>Я прекрасно знаю про такие вещи как интерпретация и JIT-компиляция, а так же о преимуществах и недостатках динамической и статической типизации. :)

Статья была не про это. Речь о том, что PostSharp - хороший концепт, который однако бездумно использовать нельзя - медленно работает.

Если хочется пообщатся по поводу проблем динамической типизации, пишите на почту (адрес я оставлял у вас в блоге).</description>
		<content:encoded><![CDATA[<p>Я прекрасно знаю про такие вещи как интерпретация и JIT-компиляция, а так же о преимуществах и недостатках динамической и статической типизации. :)</p>
<p>Статья была не про это. Речь о том, что PostSharp &#8211; хороший концепт, который однако бездумно использовать нельзя &#8211; медленно работает.</p>
<p>Если хочется пообщатся по поводу проблем динамической типизации, пишите на почту (адрес я оставлял у вас в блоге).</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Aikin</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3493</link>
		<dc:creator>Aikin</dc:creator>
		<pubDate>Wed, 17 Jun 2009 13:13:20 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3493</guid>
		<description>ПостШарп не работает через рефлексию, он инструментирует сборку после билда.

Вот такую шнягу можно увидеть рефлектором:
[DebuggerNonUserCode, CompilerGenerated]
public long Method(int r, int y)
{
    Delegate delegateInstance = new ~PostSharp~Laos~Implementation.~delegate~0(this.~Method);
    object[] arguments = new object[] { r, y };
    MethodInvocationEventArgs eventArgs = new MethodInvocationEventArgs(delegateInstance, arguments);
    ~PostSharp~Laos~Implementation.CustomAttribute~1.OnInvocation(eventArgs);
    return (long) eventArgs.ReturnValue;
}
Если бы там была рефлексия ситуация была бы еще хуже (~700 раз).

По поводу динамических языков (питон, айронПитон): Ты не задумывался почему скрость работы чистого кода так низка? Языки с динамической типизацией привносят свои проблемы.</description>
		<content:encoded><![CDATA[<p>ПостШарп не работает через рефлексию, он инструментирует сборку после билда.</p>
<p>Вот такую шнягу можно увидеть рефлектором:<br />
[DebuggerNonUserCode, CompilerGenerated]<br />
public long Method(int r, int y)<br />
{<br />
    Delegate delegateInstance = new ~PostSharp~Laos~Implementation.~delegate~0(this.~Method);<br />
    object[] arguments = new object[] { r, y };<br />
    MethodInvocationEventArgs eventArgs = new MethodInvocationEventArgs(delegateInstance, arguments);<br />
    ~PostSharp~Laos~Implementation.CustomAttribute~1.OnInvocation(eventArgs);<br />
    return (long) eventArgs.ReturnValue;<br />
}<br />
Если бы там была рефлексия ситуация была бы еще хуже (~700 раз).</p>
<p>По поводу динамических языков (питон, айронПитон): Ты не задумывался почему скрость работы чистого кода так низка? Языки с динамической типизацией привносят свои проблемы.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Roinet</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3492</link>
		<dc:creator>Roinet</dc:creator>
		<pubDate>Wed, 17 Jun 2009 12:58:33 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3492</guid>
		<description>АОП в Java и .Net работает через рефлексию, и, естественно, оно медленное. Я собственно об этом и говорил. Только изменение принципов работы платформы поможет хоть как-то исправить ситуацию, а так удел библиотек типа PostSharp - использование в очень специфических случаях, где скорость не важна, а от декларативного представления задачи объем кода, времени, геммороя резко снижается.
На других платформах, типа python, использование декораторов более чем оправдано.</description>
		<content:encoded><![CDATA[<p>АОП в Java и .Net работает через рефлексию, и, естественно, оно медленное. Я собственно об этом и говорил. Только изменение принципов работы платформы поможет хоть как-то исправить ситуацию, а так удел библиотек типа PostSharp &#8211; использование в очень специфических случаях, где скорость не важна, а от декларативного представления задачи объем кода, времени, геммороя резко снижается.<br />
На других платформах, типа python, использование декораторов более чем оправдано.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Aikin</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3491</link>
		<dc:creator>Aikin</dc:creator>
		<pubDate>Wed, 17 Jun 2009 12:50:28 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3491</guid>
		<description>Немного погонял у себя тесты. Вот результаты.

Первое:
Сравнивать чистую версию с постшарпом некорректно. Корректней было бы сравнивать все с &quot;паттерным декоратором&quot;.

Второе:
eventArgs.Delegate.DynamicInvoke -- совсем не рефлексия, а вызов делегата. 
Оказалось, что рефлексия показывает совсем запредельные тормоза (в 700 раз медленнее чем читый метод) о_0

Так что надеятся на изменения в рантайме не стоит.

Третье:
Во время вызова метода, процессор проводит в потрохах постшарпа примерно столько же времени сколько в вызове делегата.


Выводы делать как-то ломает.

P.S. Cтранно, что MethodInvocationEventArgs.Delegate помечен устаревшим и предлагается использовать MethodInvocationEventArgs.Method. Производительность рефлексии просто ужасает</description>
		<content:encoded><![CDATA[<p>Немного погонял у себя тесты. Вот результаты.</p>
<p>Первое:<br />
Сравнивать чистую версию с постшарпом некорректно. Корректней было бы сравнивать все с &#8220;паттерным декоратором&#8221;.</p>
<p>Второе:<br />
eventArgs.Delegate.DynamicInvoke &#8212; совсем не рефлексия, а вызов делегата.<br />
Оказалось, что рефлексия показывает совсем запредельные тормоза (в 700 раз медленнее чем читый метод) о_0</p>
<p>Так что надеятся на изменения в рантайме не стоит.</p>
<p>Третье:<br />
Во время вызова метода, процессор проводит в потрохах постшарпа примерно столько же времени сколько в вызове делегата.</p>
<p>Выводы делать как-то ломает.</p>
<p>P.S. Cтранно, что MethodInvocationEventArgs.Delegate помечен устаревшим и предлагается использовать MethodInvocationEventArgs.Method. Производительность рефлексии просто ужасает</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Roinet</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3489</link>
		<dc:creator>Roinet</dc:creator>
		<pubDate>Wed, 17 Jun 2009 10:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3489</guid>
		<description>Естественно, тормоза из-за рефлексии. На самом деле показанные цифры - ещё не самый плохой результат, в .net 1.1 говорят ещё хуже было, но я его не застал. :)

Проблема данного решения именно в скорости - у меня постоянно идут проекты, связанные с высокими нагрузками, потому использовать декораторы не получается.  Приходится принимать правила конкретной платформы. Есть надежда, что в последующих версиях Шарпа (5.0 и далее) введут какие-то элементы декларативности.</description>
		<content:encoded><![CDATA[<p>Естественно, тормоза из-за рефлексии. На самом деле показанные цифры &#8211; ещё не самый плохой результат, в .net 1.1 говорят ещё хуже было, но я его не застал. :)</p>
<p>Проблема данного решения именно в скорости &#8211; у меня постоянно идут проекты, связанные с высокими нагрузками, потому использовать декораторы не получается.  Приходится принимать правила конкретной платформы. Есть надежда, что в последующих версиях Шарпа (5.0 и далее) введут какие-то элементы декларативности.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Aikin</title>
		<link>http://roinet.net/2009/03/30/decorators/comment-page-1/#comment-3487</link>
		<dc:creator>Aikin</dc:creator>
		<pubDate>Wed, 17 Jun 2009 10:01:09 +0000</pubDate>
		<guid isPermaLink="false">http://roinet.net/?p=46#comment-3487</guid>
		<description>Интересная статья. Спасибо.

А ты не пробовал посмотреть что же именно тормозит в PostSharp сценарии? Что-то мне кажется, что основные тормоза вызваны рефлексией, а не самим постшарпом. 
С другой стороны, работа с рефлексией навязана самим постшарпом, так что это так же его косяк.</description>
		<content:encoded><![CDATA[<p>Интересная статья. Спасибо.</p>
<p>А ты не пробовал посмотреть что же именно тормозит в PostSharp сценарии? Что-то мне кажется, что основные тормоза вызваны рефлексией, а не самим постшарпом.<br />
С другой стороны, работа с рефлексией навязана самим постшарпом, так что это так же его косяк.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
