Группировка строк

Потребовалось решить простую задачку: есть большой список строк (ip адресов), нужно подсчитать количество дублирующихся записей и отсортировать список по этому значению. Читать далее «Группировка строк»

Городской телефон бесплатно?

Не так давно я подключился к Good Line, и уже месяц звоню на городские телефоны бесплатно. Это не привилегия сотрудников, любой абонент может делать тоже самое. Сразу хочу сказать, что статья написана по моей инициативе, без моральной/материальной поддержки компании. Читать далее «Городской телефон бесплатно?»

Подводные камни XmlSerializer

Мне очень нравится возможность .NET выполнять xml сериализацию. Очень удобно сохранять и загружать практически любые данные.

Читать далее «Подводные камни XmlSerializer»

Здравствуй, Mercurial!

Около полугода назад я стал заниматься разработкой воксельной игры на подобии Minecraft. Сначала занимался один, потом нашел единомышленников. Они и подтолкнули меня перейти на Mercurial. Попробовал — понравилось. Я окончательно перевел все проекты с SVN на Mercurial и очень доволен. Читать далее «Здравствуй, Mercurial!»

Пора менять жесткий диск

Третьего дня обновил свой главный домашний компьютер, теперь у меня Intel Core i7 2600k, 8 Gb DDR3 1333, ATI Radeon 6850.

Предыдущая конфигурация была такая: AMD Athlon 64 X2 6000+, 4 Gb DDR2 800, Nvidia GeForce 9600 GT

Новая система в несколько раз мощнее предыдущей. Но разница работы в системе Windows 7 практически не заметна на глаз. Это «немного» удручает, ведь хочется почувствовать всю мощь системы. Оценка системы Windows однозначно указывает на «узкое место» — жесткий диск. Читать далее «Пора менять жесткий диск»

Костыль для Redmine

Введение

Redmine — отличная система управления проектами, написанная на ruby. Система бесплатная и с открытым исходным кодом. Устанавливается как на Unix так и на Windows. Redmine поддерживает работу с MySQL, PostgreSQL и SQLite. Отличное решение для малых и средних проектов.

Благодаря ребятам из Bitnami у нас есть замечательный пакет «все в одном», который устанавливает все необходимое, мы получаем рабочий redmine с минимальным количеством телодвижений. Скачать его можно здесь.

Система работает следующим образом. Устанавливаются 2 сервера Mongrel для выполнения самого redmine. Доступ к этим серверам разрешен только локально. Для обеспечения доступа из сети устанавливается apache c балансировкой между этими двумя серверами.

Используя redmine я столкнулся только с одной проблемой — через некоторое время бездействия (порядка 6 часов), он перестает работать. Помогает перезапуск сервера, и пляска по разным адресам в redmine, тогда, через некоторое время, он заводится и работает до следующего простоя.

Читать далее «Костыль для Redmine»

Почем методы? (Сравнение скорости работы методов в .NET)

Сегодня мы рассмотрим скорость работы методов.

К сравнению представлены следующие типы «методов»:

  1. вызов метода своего класса (this),
  2. вызов метода другого класса,
  3. вызов виртуального метода (virtual),
  4. вызов переопределенного виртуального метода (override),
  5. вызов события (event),
  6. вызов делегата на базе лямбда выражений (Lambda expressions).

Читать далее «Почем методы? (Сравнение скорости работы методов в .NET)»

.NET Свойства против полей. Что быстрее?

Третьего дня писал очень ресурсоёмкий алгоритм. Он был узким местом во время работы приложения, и, соответственно, его скорость работы серьезным образом отражалась на производительности всего приложения. Запустив профайлер заметил, что основная нагрузка приходилась на получение значений из свойств. Не долго думая, я заменил автоматические свойства полями. Профайлер показал значительный прирост производительности. На этом я и успокоился.

Однако этот факт не давал мне покоя — как же так, я везде и всегда старался следовать правилам написания кода, а тут оказывается что этим самым рубил его производительность? Я решил написать небольшой тест для оценки скорости работы свойств и полей. Вот что у меня получилось.
Читать далее «.NET Свойства против полей. Что быстрее?»

Настраиваем настройки

Место нахождения

В Microsoft Visual Studio есть очень полезная вещь — встроенная поддержка настроек «из коробки». Если нужна настройка в программе — открываем редактор, вводим название, тип и значение по умолчанию. Все. Можно пользоваться. Настройки загружаются, сохраняются, сбрасываются.

В коде можно написать (CoolSetting — название, тип System.Int32):

Settings.Default.CoolSetting = 5;

Типом настройки может быть любой сериализуемый тип. Но вот возникает необходимость добавить список чего-либо, и мы натыкаемся на нежелание редактора работать с generic (List<T> и т.д.).

Исправлять эту несправедливость придется руками. Благо сделать это нужно всего один раз для опции с generic-типом. Нужно добавить настройку указав ей любой доступный тип (например System.String). Затем открыть файл Settings.settings в текстовом редакторе и заменить на нужный нам тип (полностью), треугольные скобочки <> заменяем на &lt; и &gt; соответственно.

Здесь показано где именно нужно менять тип

Теперь можно возвращаться во встроенный редактор настроек, и работать.

Хочется обратить внимание на одну неприятную особенность работы со встроенными настройками. Первое обращение к любой настройке вызовет достаточно серьезный лаг, доходящий до 1000 миллисекунд!!! Следующие обращения будут работать приемлемо быстро. Как правило это время затрачивается при загрузке программы, тем самым удлиняя ее.