Перейти к содержимому
tarakanoffth

m-r Tarakanoff

@tarakanoffth

На сайте с 22 августа 2010 г.Казахстан, Алматы

The best C# and .NET days are ahead of us. (25 Mar 2010 by Miguel de Icaza)

рейтинг

100

постов

47

комменты

116

подписчиков

14

подписок

5

.NET Framework, System.Xml, MSXML и "чудеса производительности"

Например, мы используем XSLT-трансформацию, как шаблонизатор в веб-приложении ASP.NET. Первое что приходит в голову — это пространство имен System.Xml и System.Xml.Xsl, которые предоставляют универсальные классы для работы с XML и XSLT. А теперь второе. Что не сразу приходит в голову. Это подключение ActiveX-компонента MSXML (6.0). Который тоже предоставляет универсальные классы для работы с XML и XSLT. Собственно, сам файл библиотеки компонента (msxml6.dll) копируется в каталог с веб-приложением, а затем на него создается ссылка и уже с компонентом можно спокойно работать из веб-приложения. В чем нелогичность второго способа? В том, что подключение ActiveX-компонента и работа с ним, значительно снижает производительность? В самом деле, ведь это неуправляемый код, обертка функций, преобра…

-4
1
513

Шаблон для XSLT — writeHrefAttrib

Шаблон добавляет атрибут href к тегу a и форматирует значение в нижний регистр. Например /Page/My-About-Page/ в /page/my-about-page/. Шаблон: <xsl:template name="writeHrefAttrib"> <xsl:param name="url" /> <xsl:variable name="urllower" select="normalize-space(translate($url,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'))" /> <xsl:attribute name="href"> <xsl:value-of select="$urllower" /> </xsl:attribute></xsl:template> * This source code was highlighted with Source Code Highlighter. Применение: <a> <xsl:call-template name="writeHrefAttrib"> <xsl:with-param name="url" select="@linkUrl" /> </xsl:call-template> <xsl:value-of select="@linkText" /></a> * This source code was highlighted with Source Code Hi…

-4
0
444

Красно-желтые книги по разработке веб-приложений ASP.NET от издательств "WROX" и "Диалектика"

Действительно отличные книги (издательства WROX и Диалектика), написанные с участием профессиональных разработчиков на платформе ASP.NET, настоящими техническими писателями.

Однако, ещё одна причина, по которой я бы постоянно покупал книги по ASP.NET именно этой серии (Programmer to Programmer) — это традиционная коллективная фотография авторов книги (на обложке).

Например, на обложке ниже — Кристиан Дари и Джейми Сирович — два специалиста в области маркетинга и разработки для Web. А я вижу на ней весьма циничного хакера, не лишенного чувства юмора (слева) и его надежный заслон ("крыша"), явно восточно-европейского происхождения (справа):

Классические "мозги" и "мышцы".

-4
1
518

Хэлперы (helpers) в ASP.NET MVC и производительность

В маниакальной погоне за производительностью в веб-приложениях ASP.NET MVC, мы, наконец, добираемся и до представлений (шаблонов). Производительность рендеринга (вывод в поток исходного кода HTML) представлений. Как обычно, Майкрософт стремится к универсальности и потому разработала богатый набор хелперов для ASP.NET MVC (Html-helpers, Url-helpers, строготипизированные хелперы и т.п.) Штука, несомненно (!) очень удобная, но посмотрим, например, на производительность UrlHelper`а. При количестве зарегистрированных маршрутов (routes) — 3 и выводимых на страницу ссылок — 100, мы используем в итерации удобный RouteUrl("RouteName", new { parameter = "value" }) и получаем время рендеринга страницы: Time taken: 0,0055 sec (183) req/sec А теперь без использования RouteUrl (т.е. просто печатаем мар…

-4
1
648

Еще один способ рестарта веб-приложения (ASP.NET)

Ранее, я уже писал о, документированном в библиотеке MSDN, способе рестарта веб-приложения.

И вот ещё один (http://www.west-wind.com/westwindwebtoolkit/):
public static bool RestartWebApplication()
{
bool flag = false;
try
{
HttpRuntime.UnloadAppDomain();
}
catch
{
flag = true;
}
if (flag)
{
string path = HttpContext.Current.Request.PhysicalApplicationPath + @"\web.config";
try
{
File.SetLastWriteTimeUtc(path, DateTime.UtcNow);
}
catch
{
return false;
}
}
return true;
}

Шо в нем есть интересное? А то, что помимо вызова функции UnloadAppDomain() класса HttpRuntime, зачем-то (зачем?) напрямую меняется дата последнего изменения файла web.config. Т.е. файл как-бы "изменился", что приводит (как всем известно) к перезагрузке веб-приложения ASP.NET.

-4
2
498

Как с использованием IoC-контейнера "приготовить "спагетти-код"

Инверсия управления (Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах и входящий в пятерку важнейших принципов SOLID. (Википедия). Теперь, без лишних определений, посмотрим, как использовать IoC-контейнер в точности наоборот и, испортив архитектуру слабо-связанного кода, "приготовить "спагетти-код". 1. Перво-наперво, нужно создать сам IoC-контейнер в виде строго определенного класса. Автоматически, мы создали зависимость всего приложения от этой реализации IoC-контейнера, а реализацией может быть даже сторонний IoC-контейнер (свои собственные реализации контейнеров пишут очень редко). 2. Затем, следует зарегистрировать контейнер в самом себе (да-да!) и использовать его в конструкторах…

-4
1
458

Глобальные фильтры в ASP.NET MVC 3

Среди множества возможностей в ASP.NET MVC 3, есть и глобальные фильтры действий (actions). Это значит, что при выполнении какого-либо действия, выполняются все фильтры, которые мы регистрируем в глобальной коллекции (GlobalFilters). Сразу отмеченная ложка дегтя, всплывает в бочке меда, для всех, кто знает такие механизмы фильтров действий, как FluentFilters или как в OXITE CMS (см. пост "FluentFilters для ASP.NET MVC и OXITE"). Эта ложка — невозможность указать конкретный контроллер и/или действие для которого выполнится фильтр.Это значит, например, что фильтр, который достает из БД различные рекламные баннеры и выдает их с определенной последовательной логикой для отображения на главной странице, будет выполнятся не только на главной странице, но и всех страницах сайта. Это в принципе х…

-4
0
580

Fluent Filters для ASP.NET MVC и OXITE

FluentFilters помогает вам реализовать функциональность глобальных фильтров в ASP.NET MVC приложении с возможностью фильтрации по контроллерам и действиям контроллеров. Разработчики OXITE реализовали собственную систему глобальных фильтров, немного похожую на FluentFilters. За исключением механизма фильтрации по контроллерам и действиям. В FluentFilters, приходится жестко прописывать названия контроллеров и действий в условии фильтра: fluentFilters.Add<TestActionFilterAttribute>(a => { a.Require(new ControllerFilterCriteria("Admin")).Or(new ControllerFilterCriteria("Manager")); a.Exclude(new ControllerFilterCriteria("Manager")).And(new ActionFilterCriteria("Index")); }); ...а в OXITE это элегантно работает через MethodInfo и, само собой, проходит проверку на стадии компиляции при…

-4
2
447

Немного о Global.asax | .NET

При создании файла приложения ASP.NET Global.asax средствами Visual Studio, последняя автоматически генерирует там несколько знакомых событий. В каждое событие передается параметр sender типа object. Интереса ради, а может быть и для пользы дела, ниже приведены раскрытые типы параметра sender в каждом из событий: protected void Application_Start(object sender, EventArgs e) { /* System.Web.HttpApplicationFactory */ } protected void Session_Start(object sender, EventArgs e) { /* System.Web.SessionState.SessionStateModule */ } protected void Application_BeginRequest(object sender, EventArgs e) { /* System.Web.HttpApplication (или производный от него свой тип) */ } protected void Application_AuthenticateRequest(object sender, EventArgs e) { /* System.Web.HttpApplication (или производный от не…

-4
0
474

Как сделать собственный механизм сессий в ASP.NET | .NET

Собственно, свой механизм делать не стоит, бред. Это делается, чтобы среда ASP.NET (в частности ASP.NET MVC не ругалась на его отсутствие). Лучше создать модуль-заглушку, который ничего делать не будет. И в общем и целом производительности ради. Сессии нам не нужны. Итак, берем наш файл web.config и удаляем оригинальный модуль поддержки сессий: <httpModules> <remove name="Session" /> </httpModules> Откуда мы узнали под каким именем зарегистрирован оригинальный модуль? В файле web.config, который лежит в папке /windows/Microsoft.NET/Framework/версия-фреймворка/config/. Затем, регистрируем свой фиктивный модуль: <httpModules> <remove name="Session" /> <add name="FakeSession" type="MyWebApp.FakeSessionModule, MyWebApp" /> </httpModules> Идем в код и…

-4
0
415