Здравствуйте, Utruk, Вы писали:
U>>>Т.е вы хотите сказать что если я скажем перепишу анализ документа на C#, то при одинаковом алгоритме он будет быстрее чем на Delphi? G>>При одинаковом алгоритме конечно нет. А если написать хороший алгоритм для .NET, то прога на C# окажется быстрее, а код станет гораздо более удобочитаемый. U>Ну дык и для нативного приложения можно написать хороший алгоритм. Разве не так?
Фишка в том, что на .NET и Java можно писать много быстрее и качественнее и во многом благодаря вышеуказанным средствам, о которых ты ясное дело не слыхивал и ни видывал, а раз так, то и больше времени на mature optimization (ибо premature во всех ее проявлениях есть зло), тестирование и отладку.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Utruk, Вы писали:
U>>Как всё плохо оказывается-то... данные находятся. Какие-нибудь данные
НС>Да нет, мусор там. Теперь осталось выяснить, что находится в шарповских массивах.
Да нет, нули там. Это видимо FastMM так старается. Но даже если добавить обнуление массива, то изменения скорости меньше чем статистическая погрешность.
Здравствуйте, kuj, Вы писали:
kuj>Фишка в том, что на .NET и Java можно писать много быстрее и качественнее и во многом благодаря вышеуказанным средствам, о которых ты ясное дело не слыхивал и ни видывал, а раз так, то и больше времени на mature optimization (ибо premature во всех ее проявлениях есть зло), тестирование и отладку.
Да я и не спорю... но меня эти вопросы пока что не волнуют. Наверное как сяду за С# плотно, так сразу вопросы оптимизации начнут волновать придется искать средства чтобы высвободить время на "оптимизацию, тестирование и отладку".
Здравствуйте, kuj, Вы писали:
U>>Я до сих пор сравнивал C# и Delphi только в разрезе скорости. Про остальные моменты даже не заикался. Если вы не поняли, я не виноват. Читать внимательнее надо сообщения. Если бы вы сразу сказали: "Не, это не критерий, эдак мы быстро придем к выводу что Delphi лучше чем C#", то я бы счел вопрос закрытым и возможно перешел бы к другой теме.
kuj>Скорости чего? Сферического коня в банаховом пространстве? Самому еще не смешно?
Скорости работы кода написанного на сем языке. Я привел пример. Есть пара идей ещё сортировка вставками в дерево, шеллом и квиксорт... тоже интересно. Потом попробовать какую-нить математику.
Здравствуйте, Utruk, Вы писали:
U>Здравствуйте, kuj, Вы писали:
kuj>>Фишка в том, что на .NET и Java можно писать много быстрее и качественнее и во многом благодаря вышеуказанным средствам, о которых ты ясное дело не слыхивал и ни видывал, а раз так, то и больше времени на mature optimization (ибо premature во всех ее проявлениях есть зло), тестирование и отладку.
U>Да я и не спорю... но меня эти вопросы пока что не волнуют. Наверное как сяду за С# плотно, так сразу вопросы оптимизации начнут волновать придется искать средства чтобы высвободить время на "оптимизацию, тестирование и отладку".
Да... если у Вас нечего сказать существенного по скорости, то лучше не говорите вообще... отвлекает. Castle я займусь попозже, когда и если в нем возникнет потребность. По поводу какое дельфи гумно и как на ём плохо писать сетевые сервера тоже не надо, я уже всё понял 7000 соединений в сутки — это круто.
Здравствуйте, kuj, Вы писали:
kuj>Теоретически может работать быстрее, учитывая, что IL компилируется непосредственно на целевой платформе, что дает бОльший простор для оптимизации.
где-нибудь есть исходники jit компилятора .net? просто посмотреть как там практически
Здравствуйте, Utruk, Вы писали:
U>Да нет, нули там. Это видимо FastMM так старается.
Да нет, мусор там. SetLength не инициализирует байты. Это видимо ОС так старается — зануляет память после выгрузки оттуда предыдущей программы...
Здравствуйте, Mr.Cat, Вы писали:
A>>где-нибудь есть исходники jit компилятора .net? просто посмотреть как там практически MC>mono?
фигня. как компилятор работает я как-бы знаю...
но мы ж вроде сравниваем 2009-ый дельфи с M$-овской реализацией .net 3.0. вот в последнем мне интересен "оптимизатор под целевую платформу" — может кто притырил где?
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, Utruk, Вы писали:
U>>Да нет, нули там. Это видимо FastMM так старается. A>Да нет, мусор там. SetLength не инициализирует байты. Это видимо ОС так старается — зануляет память после выгрузки оттуда предыдущей программы...
Смотрел в отладчике. Но даже если мусор, то явное заполнение массива нулями на производительности практически никак не сказалось.
Здравствуйте, Utruk, Вы писали:
U>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, Utruk, Вы писали:
G>>Говорилось про 7000-8000 подключений в сутки. то есть где-то одно подключение за 20 секунд. Такую нагрузку практически любая прога выдержит. В десятки раз большая нагрузка — менее секунды на запрос уже серьезная нагрузка. Если запросы обрабатываются достаточно медленно, то производительнось может упереться в количество тредов и открытых подключений. U>Не понятно-же как оно распределено по суткам. Может все 7000 случаются в пределах получаса, а может размазано равномерно по суткам. Этого автор не написал... Если 7000 равномерно размазано по суткам и это говорится в контексте "посмотрите какой у нас производительный прожект на С#" то блин... ну тогда либо С# просто редкостное, либо автор к написанию сервера отношение имеет крайне посредственное. Потому что на том ксеоне с 80-тью тысячами соединений, сервер приложений написанный на Kylix+Indy+C++ совершенно никого не напрягал по скорости (это было примерно 250 рабочих станций). Сколько максимум одновременно активных соединений за всё время работы сервера я как-то не удосуживался посмотреть, но самое большое которое доводилось видеть было около 120. По потоку на клиента.
Что клиенты на сервере делали? Какова частота прихода запросов от клиентов? Каково время обработки одного запроса?
Здравствуйте, Utruk, Вы писали:
U>Здравствуйте, gandjustas, Вы писали:
G>>Спасибо, поржал.
U>Ваш вариант в студию.
только что скачал Turbo Delphi
Чуть более реальный сценарий, как раз выделение-освобождение памяти.
public class TestObject
{
private const int ByteSize = 50;
protected byte[] TestArray;
public TestObject()
{
TestArray = new byte[ByteSize];
}
}
class Program
{
private const int ObjectCount = 1000;
static void Main(string[] args)
{
var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
var Objects = new List<object>(ObjectCount);
while (Objects.Count < ObjectCount)
{
Objects.Add(new TestObject());
}
}
sw.Stop();
Console.WriteLine("C# Speed {0}", sw.ElapsedMilliseconds);
Console.ReadLine();
}
}
const
ArraySize=50;
ObjectCount=1000;
type
TTestObject=class(TObject)
private
FTestArray:array of byte;
public
constructor Create;
end;
{ TTestObject }constructor TTestObject.Create;
begin
inherited Create;
SetLength(FTestArray, ArraySize);
end;
var
Objects:TObjectList;
Start, Stop:TDateTime;
Speed:Integer;
i:integer;
begin
Start:=Now;
for i := 1 to 1000 do
begin
Objects:=TObjectList.Create(TRUE);
Objects.Capacity := ObjectCount;
try
while Objects.Count<ObjectCount do
Objects.Add(TTestObject.Create);
finally
FreeAndNil(Objects);
end;
end;
Stop:=Now;
Speed:=MillisecondsBetween(Stop, Start);
WriteLn('Delphi speed ', Speed);
Readln;
end.
Результаты:
C# time 164
Delphi time 484
ЗЫ. При написании тестов запетил, что .NET тормозит при перераспределении больших блоков памяти. Поэтому большим спискам и StringBuilder с кучей текста лучше сразу выставлять capicity и не превышать её.
U>Многие "опечаточки" могут приводить в реальном коде к забавным багам. Например поставить ; после then в паскале.
Не шарю в паскале, что это будет?
U>Я уже не говорю о случаях когда в одной области видимости оказываются два идентификатора отличающиеся на одну букву.
В нормальной IDE это видно будет(при наведении на переменную все вхождения подсвечиваются). Ну, и вообще не припомню случая, чтобы переменные отличались на одну букву, кроме, разве что, индексаторов(i, j). Это как нужно называть, чтобы на одну букву? Хочу реального примера из жизни.
U>У вас не было случаев когда думаете об одном а пишете совсем другое? Хотелось бы все таки конструктивного подхода.
Наверное, я не из потомков Цезаря, я так не умею.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
E__>Здравствуйте, Utruk, Вы писали:
U>>Многие "опечаточки" могут приводить в реальном коде к забавным багам. Например поставить ; после then в паскале.
E__>Не шарю в паскале, что это будет?
Здравствуйте, Eugeny__, Вы писали:
E__>В нормальной IDE это видно будет(при наведении на переменную все вхождения подсвечиваются).
Вы внимательно изучаете каждый раз что подсветилось а что нет?
E__>Ну, и вообще не припомню случая, чтобы переменные отличались на одну букву, кроме, разве что, индексаторов(i, j). Это как нужно называть, чтобы на одну букву? Хочу реального примера из жизни.
Page.Size и Pages.Size — что они будут обозначать сами додумаете или объяснить?
U>>У вас не было случаев когда думаете об одном а пишете совсем другое? Хотелось бы все таки конструктивного подхода.
E__>Наверное, я не из потомков Цезаря, я так не умею.
У вас наверное и ошибок в программах не бывает никогда. Завидую.
U>Естественно вместе с GC.Collect, потому как объектов много и память физическая нужна сейчас, а не когда-нибудь.
Вызов GC.Collect() совершенно не гарантирует, что запустится сборка мусора. Если памяти еще дофига, то зачем ее очищать?
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, gandjustas, Вы писали:
G>Что клиенты на сервере делали?
Размещали (фоновый процесс) или просматривали (интерактивное GUI приложение) изображения + некоторые метаданные.
G> Какова частота прихода запросов от клиентов? G> Каково время обработки одного запроса?
Я честно говоря уже не очень хорошо помню конкретные цифры которые замерялись, но в среднем от одного клиента в зависимости от характера выполняемой задачи приходил один запрос с интервалом в 2..3 минуты. Каждый клиент работал примерно две смены из трех. Кроме того в систему равномерно влетало примерно 20..40 тысяч документов в сутки (1 документ — 1 запрос). Время обработки одного запроса от мгновенного (ну там сотни миллисекунд) до секунд 5 (когда они наваливались на сервер). Естественно приоритет работы пользователей был наивысшим, если чо фоновым процессам показывался кукишь и они отыгрывались на сервере по ночам, когда пользователей было мало.
Здравствуйте, Utruk, Вы писали:
U>Я честно говоря уже не очень хорошо помню конкретные цифры которые замерялись, но в среднем от одного клиента в зависимости от характера выполняемой задачи приходил один запрос с интервалом в 2..3 минуты. Каждый клиент работал примерно две смены из трех. Кроме того в систему равномерно влетало примерно 20..40 тысяч документов в сутки (1 документ — 1 запрос). Время обработки одного запроса от мгновенного (ну там сотни миллисекунд) до секунд 5 (когда они наваливались на сервер). Естественно приоритет работы пользователей был наивысшим, если чо фоновым процессам показывался кукишь и они отыгрывались на сервере по ночам, когда пользователей было мало.
Вполне терпимая нагрузка на один неочень мощный сервак.