Показаны сообщения с ярлыком C#. Показать все сообщения
Показаны сообщения с ярлыком C#. Показать все сообщения

среда, 27 марта 2013 г.

Thread vs ThreadPool

Внимательно следите за этими двумя сущностями. ThreadPool удобнее и логичнее в ряде случаев, но иногда может подложить свинью. А именно - когда функциональность, которая должна выполняться в одном, но параллельном потоке ВНЕЗАПНО раскладывается на кучу потоков.
Это реально может послужить причиной многих багов. В общем - контролируйте потоки в своем приложении. Thread - для более тонкого планирования многопоточности. ThreadPool - быстрое, но потенциально грабельное решение.

воскресенье, 10 февраля 2013 г.

Extension-методы и разлом стереотипов

Сегодня сломались все мои представления о программировании на C# и extension-методах в частности, когда я увидел вот такой код:



1.Delay();
2.CreateThread();
3.WaitForUserInput();



А это оказались всего лишь extension-методы к int. Согласитесь, выглядит феерично.
Тут сразу же пришла на ум конструкция для более внятного кидания exception-ов:


"Access denied".InvalidOperation();
"File not found".FileAccess();
"Trying to instantiate incorrect type".FactoryError();
"Incorrect value: number expected".Validation<User>(u=>u.AgeString);

Полагаю, дальнейшие комментарии излишни.

вторник, 5 февраля 2013 г.

Совет про Dictionary


var d = new Dictionary<string,int>() {
    {"NumberOne" /* ключ */,1 /* значение */},
    {"NumberTwo",2},
    {"NumberThree",3},
};

Как ни странно, можно и так.

RavenDB Embeddable - коротко и по существу

Сессии:

  • Открытие сессии: дешевая, почти дармовая операция (65000 сессий за 300-500мс).
  • Закрытие сессии: и того дешевле (65000 сессий за 0-3мс)
  • По умолчанию количество запросов на сессию ограничивается 30 штуками. Устанавливается при в DocumentStore.Conventions.MaxNumberOfRequestsPerSession
Инициализация хранилища: 
  • очень дорогая операция - от 7с до минуты и больше
  • похоже, имеет место зависимость от размера хранилища
SaveChanges: 
  • дорогая операция. Зависит от количества объектов (1000 объектов за 1-15мс). 
  • В TransactionScope время выполнения не меняется.
Работа с Queryable: 
  • Выполненные Queryable кэшируются. После добавления данных нужно взять новый .Query<>
Работа с транзакциями: 
  • объекты оказываются в базе только после transaction.Complete(); или Dispose в using-блоке транзакции. Точно выяснить когда начинает работать .Count() после добавления объектов - не удалось
  • Уровни изоляции, судя по всему, не реализованы. 
  • Если SaveChanges прервертся во время выполнения без транзакции - умрет вся база! 


вторник, 15 января 2013 г.

T4

Используйте T4, когда возникает необходимость генерировать текст или код.

Тут качается, а тут читается. В общем и целом - очень похоже на Razor/ASP.NET MVC. 

WPF и Windows 8

Проблема: хочу сделать интерфейс в своем WPF-приложении, как в Windows 8 или Office 2013

Решение: Microsoft не затрудняет себя, как правило, разработкой паков GUI-вещей после выхода каждого нового продукта. На этом зарабатывают многие компании. И эта беда не обошла Windows 8. К счастью, есть энтузиасты, сделавшие почти все элементы Windows 8 на WPF и подготовившие их к использованию. Найти их с исходниками можно вот тут: http://elysium.codeplex.com/

Да. Ни в коем случае не пытайтесь повторить их путь, особенно при сжатых сроках - потратите уйму времени и соберете дикое количество граблей.

четверг, 22 ноября 2012 г.

Совет

Для тестирования WCF-сервисов есть добротная утилита WcfTestClient.exe, лежит в C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE

Проблема с транзакциями

Проблема: При написании транзакционного кода на C# через using(var transactionScope = new TransactionScope()){...} блок завершается с TransactionAbortedException

Решение: Ставить в конце блока transactionScope.Complete(), если return не должен по логике откатить транзакцию