Ваш вариант выглядел бы так для EF:
ctx.Orders
.Where(o => customersIds.Contains(o.Id))
.ToList()
.GroupBy(o => o.CustomerId).ToDictionary(o => o.Key, o => o.ToList());
И запрос он выдаст абсолютно такой же из-за .ToList()
Купил на днях себе такой, до этого был Desire.
+ ощутимо быстрее
+ больше памяти, в т.ч. для приложений в телефоне
+ лучше камера
+ лучше держит батарейку
+ металлический корпус(уже падал, остались небольшие вмятинки)
— нет аппаратных кнопок(!)
— нет джойстика(!), выделять текст — сплошное мучение, хотя это скорее претензия к андроиду
— металлический корпус (скользит больше, чем софт-тач пластик)
— как мне показалось, хуже ловит GPS
— поменяли местами 3.5" джек и кнопку включения(нахера?????)
— перевернули и влепили набок mini-usb разъем(перевернули-то зачем?)
— качелька громкости менее удобная(по крайней мере, для меня)
Выводы:
1. Можно юзать читаемый, переносимый и компактный Json.net вместо BinaryFormatter
2. Если хочется скорости — можно посмотреть в сторону других библиотек
Позволю себе продолжить ваши изыскания: json.codeplex.com/releases/view/64935
The test of binary formatter:
1000 iterations in 122 ms
2000 iterations in 186 ms
3000 iterations in 286 ms
4000 iterations in 358 ms
5000 iterations in 450 ms
The test of protobuf-net:
1000 iterations in 137 ms
2000 iterations in 47 ms
3000 iterations in 72 ms
4000 iterations in 93 ms
5000 iterations in 118 ms
The test of json-net:
1000 iterations in 232 ms
2000 iterations in 200 ms
3000 iterations in 313 ms
4000 iterations in 406 ms
5000 iterations in 513 ms
The comparision of file size:
The size of tasks1.bin is 725 bytes
The size of tasks2.bin is 101 bytes
The size of tasks3.bin is 244 bytes
private static void TestJson(IList tasks, string fileName, int iterationCount)
{
var stopwatch = new Stopwatch();
using (var file = File.Create(fileName))
{
stopwatch.Restart();
for (var i = 0; i < iterationCount; i++)
{
var str = JsonConvert.SerializeObject(tasks);
var bytes = Encoding.UTF8.GetBytes(str);
file.Write(bytes, 0, bytes.Length);
file.Read(bytes, 0, bytes.Length);
file.Position = 0;
var restoredTasks = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(bytes));
}
stopwatch.Stop();
Console.WriteLine("{0} iterations in {1} ms", iterationCount, stopwatch.ElapsedMilliseconds);
}
}
Еще нюанс,
>создавать для репозиториев каталоги и прописывать их в hgweb.config
Решается очень просто, делаете отдельную папку для репозиториев, и складываете их все туда. Добавляете в hgweb.config строку типа
Все верно, кроме
>Разархивировать в эту папку файл library.zip из каталога, в который установлен Mercurial (по умолчанию C:\Program Files\Mercurial\library.zip);
>Оттуда же скопировать папку Templates (по умолчанию C:\Program Files\Mercurial\Templates);
>И напоследок скопировать в эту директорию файл hgweb.cgi.
Сами разработчики меркуриала говорят, что такая конфигурация не поддерживается.
Лучше сделать так:
1) установить питон, x86 даже для винды x64
2) установить меркуриал, как модуль питона mercurial.selenic.com/release/windows/mercurial-1.8.3.win32-py2.6.exe
3) положить один только hgweb.cgi в папку C:\Inetpub\hg
* в качестве бонуса уходят проблемы с совместимостью, при обновлении меркуриала
Windows Azure? Или вы именно про Selectel?
Если второе, то у них на сайте: «На данный момент доступны для установки следующие операционные системы: Debian Mini, Ubuntu Lucid Lynx, Debian Squeeze, CentOS 5.»
ctx.Orders
.Where(o => customersIds.Contains(o.Id))
.ToList()
.GroupBy(o => o.CustomerId).ToDictionary(o => o.Key, o => o.ToList());
И запрос он выдаст абсолютно такой же из-за .ToList()
+ ощутимо быстрее
+ больше памяти, в т.ч. для приложений в телефоне
+ лучше камера
+ лучше держит батарейку
+ металлический корпус(уже падал, остались небольшие вмятинки)
— нет аппаратных кнопок(!)
— нет джойстика(!), выделять текст — сплошное мучение, хотя это скорее претензия к андроиду
— металлический корпус (скользит больше, чем софт-тач пластик)
— как мне показалось, хуже ловит GPS
— поменяли местами 3.5" джек и кнопку включения(нахера?????)
— перевернули и влепили набок mini-usb разъем(перевернули-то зачем?)
— качелька громкости менее удобная(по крайней мере, для меня)
1. Можно юзать читаемый, переносимый и компактный Json.net вместо BinaryFormatter
2. Если хочется скорости — можно посмотреть в сторону других библиотек
json.codeplex.com/releases/view/64935
The test of binary formatter:
1000 iterations in 122 ms
2000 iterations in 186 ms
3000 iterations in 286 ms
4000 iterations in 358 ms
5000 iterations in 450 ms
The test of protobuf-net:
1000 iterations in 137 ms
2000 iterations in 47 ms
3000 iterations in 72 ms
4000 iterations in 93 ms
5000 iterations in 118 ms
The test of json-net:
1000 iterations in 232 ms
2000 iterations in 200 ms
3000 iterations in 313 ms
4000 iterations in 406 ms
5000 iterations in 513 ms
The comparision of file size:
The size of tasks1.bin is 725 bytes
The size of tasks2.bin is 101 bytes
The size of tasks3.bin is 244 bytes
private static void TestJson(IList tasks, string fileName, int iterationCount)
{
var stopwatch = new Stopwatch();
using (var file = File.Create(fileName))
{
stopwatch.Restart();
for (var i = 0; i < iterationCount; i++)
{
var str = JsonConvert.SerializeObject(tasks);
var bytes = Encoding.UTF8.GetBytes(str);
file.Write(bytes, 0, bytes.Length);
file.Read(bytes, 0, bytes.Length);
file.Position = 0;
var restoredTasks = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(bytes));
}
stopwatch.Stop();
Console.WriteLine("{0} iterations in {1} ms", iterationCount, stopwatch.ElapsedMilliseconds);
}
}
Настройки — по кнопке Menu
Главный экран — кнопка Назад?
>Greatly reduce backup & sync time through comprehensive compression and advanced de-duplication (saving you time)
>создавать для репозиториев каталоги и прописывать их в hgweb.config
Решается очень просто, делаете отдельную папку для репозиториев, и складываете их все туда. Добавляете в hgweb.config строку типа
[collections]
d:/Team/Mercurial/Repos = d:/Team/Mercurial/Repos
После этого они автоматом у вас появятся в веб-морде.
Насчет
Попробуйте
[web]
baseurl = /hg
mercurial.selenic.com/bts/issue2675
mercurial.selenic.com/bts/msg15476
>Разархивировать в эту папку файл library.zip из каталога, в который установлен Mercurial (по умолчанию C:\Program Files\Mercurial\library.zip);
>Оттуда же скопировать папку Templates (по умолчанию C:\Program Files\Mercurial\Templates);
>И напоследок скопировать в эту директорию файл hgweb.cgi.
Сами разработчики меркуриала говорят, что такая конфигурация не поддерживается.
Лучше сделать так:
1) установить питон, x86 даже для винды x64
2) установить меркуриал, как модуль питона mercurial.selenic.com/release/windows/mercurial-1.8.3.win32-py2.6.exe
3) положить один только hgweb.cgi в папку C:\Inetpub\hg
* в качестве бонуса уходят проблемы с совместимостью, при обновлении меркуриала
ЗЫ конкурсы-призы будут?:)
Если второе, то у них на сайте: «На данный момент доступны для установки следующие операционные системы: Debian Mini, Ubuntu Lucid Lynx, Debian Squeeze, CentOS 5.»