.NET WebBrowser control - Compatibility modes / Режимы совместимости

Есть проблема - при использовании компоненты WebBrowser сайт могут начать считать, что к ним обращается браузер Internet Explorer 7


Чтобы запустить в стандартном режиме нужно обновить реестр:

[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] "MyApplication.exe" = dword 8000 (Hex: 0x1F40)
Чтобы опять показывать в режиме седьмого:
[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] "MyApplication.exe" = dword 7000 (Hex: 0x1B58)

Также есть вариант на самой странице указать какой режим совместимости использовать IE: http://blogs.msdn.com/b/askie/archive/2009/03/23/understanding-compatibility-modes-in-internet-explorer-8.aspx
+ Смотри - http://stackoverflow.com/questions/4357947/what-useragent-is-reported-by-the-webbrowser-control, где говорится, что положение вещец в целом зависит и от платформы

SQLServer vs MongoDB vs RavenDB write performance / производительность записи

Мой фривольный перевод этой статьи


Моя команда сейчас работает над проектом, где мы будем использовать MongoDB в качестве хранилища. Для оценки мы протестировали произвидительность записи в RavenDB и MongoDB, и сравнили результаты, которые мы нашли очень интересными.

Но перед тем, как я поделюсь ими, я бы хотел подчеркнуть, что это не обязательный критерий для основания выбора технологии, это просто результаты, которые мы находим интересными, технология выбора должна основываться на большем, чем на производительности...

Сейчас мы имеем продукт, основанный на SQLServer, котрый получает финансовые данные из фида. Этот фид - xml файл, размером около 400 Мб, который мы получаем ежедневно и содержит данные, состоящие из 45 тыс. фондов. Мы парсим этот файл и строим объектную модель, которая выглядит так:



SQLSERVER

В SQL каждый из этих объектов связан с другой таблицей, как и следовало ожидать.
Наше средство импорта парсит файл, строит связи и сохраняет структуру для каждого найденного фонда в фиде. Это занимает около 25 минут. Добавлю к этому, что там есть еще несколько других неописанных вещей, так что 25 минут не является подлинным отражением времени.
Профилирование проходило на продакшн-серверах, снабженных восемью четырехядерными CPU с 32 Гб ОЗУ на борту, с хорошо настроенной сетью хранения данных

RAVENDB

Такой же тест был проделан с RavenDB (single instance) на рабочей машине с одним четырехядерным процессором, восемью гигабайтами ОЗУ с обычным SSD диском ))
Лучше оригинал:
We modelled this entire graph as a single document and saved them in batches of 200 which we found to be the optimum batch size after many runs.
Время сохранения этих документов составило 2 минуты и 37 секунд, впечатляет!

MONGODB

Тест был модифицирован для MongoDB (single instance) and запущен на той же машине что и RavenDB. Мы включили SafeMode и ждали подтверждения записи документа.
Время сохранения этих документов составило 14 секунд….Wow!

Итого

Raven & Mongo разные звери со своими способами хранения/извлечения данных, которые нужно понимать до принятия решения об их примении.

P.S.: Сорри за корявый перевод, инглишем владею скудно

Firebird: глобальные переменные

Как таковых глобальных переменных, определяемых пользователем, в Firebird нет и все пользуются таблицами вида: Options(key, value)
Но если у нас слишком много чтений, например в иерархично-вызываемых триггерах, то миллисекунды превращаются в сотни миллисекунд, а то и в секунды, что не есть хорошо

При помощи функции rdb$set_context можно к контекст пользователя поместить любое значение, и, по сути, закешировать его там
Чтение из контекста (rdb$get_context) осуществляется быстрее, чем чтение из таблицы

Пример использования ниже - функция по заданному ключу выдает значение, на типы прошу не обращать внимание, т.к. данное решение не унифицировано, а вытянуто из реального проекта


create or alter procedure
  GET_OPTION_CTX_VAL (OPTION_ID integer)
  returns (VAL D_MONEY)
as
begin
    val = rdb$get_context('USER_SESSION', 'opt' || option_id);

    if (val is null) then
    begin
     select value from options where key = :option_id into :val;
     rdb$set_context('USER_SESSION', 'opt' || :option_id, :VAL);
    end

    suspend;
end

В данной функции мы читаем значение из контекста и если оно не определено, то читаем из таблицы БД и помещаем его в контекст, чтобы при следующем обращении не обращаться к таблице

Пример использования вышеописанной функции:

select cast(val as integer) from GET_OPTION_CTX_VAL(401) into :base_step;

Мне это экономит от полусекунды и более, в зависимости от тяжеловесности области использования )

Крайне не рекомендую помещать в контекст изменяемые во время выполнения значения параметров

Zip and Unzip in C# / Создание и распаковка zip-архива в C#

Для создания и распаковки zip архивов я использую библиотеку DotnetZip

Создание архива:

using (var zip = new ZipFile())
{
     // оставляем комментарий к архиву
    zip.Comment = "Archive created by " + User.Identity.Name + " at " + DateTime.Now;

    // добавляем незапароленный файл в архив
    zip.AddFile(HostingEnvironment.ApplicationPhysicalPath + "ReadMe.txt");

    // устанавливаем пароль к архиву
    zip.Password = password;

    // добавляем файл в архив, этот файл будет доступен только с вводом пароля, т.к. выше был установлен пароль
    zip.AddFile(databaseFileName);

    // установка уровня сжатия
   zip.CompressionLevel = CompressionLevel.BestCompression;
// сохраняем архив
zip.Save(databaseFileName + ".zip");
}


Распаковка архива:
using (ZipFile zip = ZipFile.Read(zipFile)) zip.ExtractAll(siteFolder, existingFileAction);

Работа библиотеки Меня вполне устраивает, но при сжатии файлов в несколько гигабайт рекомендую использовать:
zip.UseZip64WhenSaving = Zip64Option.AsNecessary;

IIS: Невозможно загрузить файл или сборку "usersupportcenter" или один из зависимых от них компонентов. Была сделана попытка загрузить программу, имеющую неверный формат.

Разрешите использование 32-х разрядных библитек в пуле приложения:


Windows 7 запись образа диска / Windows 7 Burn ISO Images Natively

Все просто:
  1. Правой кнопкой мыши кликнуть по образу диска (.iso файл)
  2. Выбрать "Burn disc image" или "Записать образ диска" для рускоязычной системы
  3. В открывшемся диалоговом окне выбрать привод для записи
  4. Нажать "Burn" или "Записать"

C# открыть веб-страницу программно / csharp open web page

Мало ли, может кому-то действительно пригодится :)
System.Diagnostics.Process.Start("http://microsoft.com");