WEB форумы на jedi
[Форум] [Помощь] [Поиск] [Выйти]
Добро пожаловать, [info]User

WEB форумы на jedi [ПОИСК] [Архив до 03.2006]

Тема про .NET К предыдущему сообщению На следующее сообщение Программирование

Отправил Gott в 00:22 01.02.2005[Ответить]
кто может без заумных слов объяснить шо оно такое и с чем его едят? В чем преимущества программирования под этот самый нет фреймворк.
Желательно количество подколок типа а ты не знаешь?! Да ты ... свести к минимуму, если совсем нельзя без них :)


Отправил Пaшкa в 00:26 01.02.2005[Ответить]
http://msdn.microsoft.com/netframework/


Отправил Dushes в 09:54 01.02.2005[Ответить]
Преимущества лучше перечислить в новшествах!технологиях:
Reflection+аттрибутивное программирование
Делегаты(в том числе ассинохронные) + на их базе событийная модель (событие или каллбек сделает даже ребенок)
Ado.net
Asp.net
XML Web-Services
MSMQ
Remouting
Серилизация в Binary!XML + SOAP
Оключенные датасеты
Smart-клиенты
Click Once
CodeDOM
Поддержка COM+ в виде RCW
В будущем независимость от платформы (пока поддерживается независимость от различных версий win)
Language independent
Office Development
Богатая библиотека классов
Версионность-контроль
Safe-код
Домены приложений
да много всего, + богатые возможности самой студии
в студии 2005 будут возможности для архитектора решения + тесная интеграция с mssql2005
ну и куча всяких полезностей и вкусностей

в качестве источников рекомендую:
http://msdn.microsoft.com/
http://msdn.microsoft.com/library/rus - если проблемы с англицким
http://www.rsdn.ru
http://www.gotdotnet.ru
http://dotsite.ru


Отправил Пaшкa в 14:11 01.02.2005[Ответить]
> Серилизация в Binary!XML + SOAP

Это как это? Я видел только BinaryFormatter и SoapFormatter.
Кстати, никто не в курсе, как десереализовать датасет по-быстрому? Сериализованный BinaryFormetter'ом десериализуется примерно 10-12 секунд. На диске занимает 9 метров.


Отправил NightWing в 19:38 01.02.2005[Ответить]
Не повыпендриваться здесь конечно не могли.

Вкратце, основных идеи 2:

1) Все языки программирования генерируют некий промежуточный MSIL код типа метаассемблера, типа джавовского байт-кода. Стандартно программа переводится в процессорный ассемблер только на этапе выполнения. Поэтому библиотеки возможно использовать во всех языках с сохранением всей метаинформации.

2) Написан сам .net framework - набор классов, реализующий практически все интерфейсы windows плюс многое иное. Поэтому программирование принципиально только объектно-ориентированное.

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


Отправил KiaProg в 08:19 02.02.2005[Ответить]
> NightWing 1)
Так по вашему выходит что это интерпритатор?


Отправил Dushes в 09:32 02.02.2005[Ответить]
> Не повыпендриваться здесь конечно не могли
действительно, видно ты никак не смог сдержаться...;)...чел спросил, ему постарались ответить.

>Так по вашему выходит что это интерпритатор?
можно даже назвать транслятором из одного языка в другой...

блин, кстати, про слона то чуть не забыл ;) - Garbage Collector - сборка мусора, поддерживаемая в рамках самого рантайм (т.е. в общем случае не приходится задумываться о сборке мусора, в спецификации с# принциписально отсутствует keyword delete, но если вдруг придется позаботиться о принудительной выгрузке объекта, то придется унаследоваться от IDisposable и реализовать Dispose(bool...))

> 2) Написан сам .net framework - набор классов, реализующий практически все интерфейсы windows плюс многое иное. Поэтому программирование принципиально только объектно-ориентированное

Ну есть кое-какие отличия - скажем, аттрибутивное программирование, позволяющее создать метаинформацию типа для дальшейшего использования при при рефлексии типа...еще одно принципиальное отличие на мой взгляд - вся .net в корне позволяет использовать асинхронность вызовов методов...+ security кода, т.е. какбы сам код является самостоятельным и сам определять правила запуска и пр.., конечно в рамках permissions самого домена...

Плюс новшества в спецификации 2. 0 -generic-types (это то что в с++ называется tamplates - шаблоны, позволяет избежать проблемы box!unbox к примеру при использовании коллекций), неполные типы данных (можно использовать в делегатах без создания именованного callback метода) ну и еще там по мелочам...


> Серилизация в Binary!XML + SOAP Это как это? Я видел только BinaryFormatter и SoapFormatter.


SOAP - имел в виду передачу данных с использованием SOAP протокола к примеру при использования вев-сервисов или ремоутинга, раньше при использовании com+ практически всегда приходилось решать проблемы с маршаллингом, использование ремоутинга + soap решает такие проблемы (опять таки могу ошибаться, с ремоутингом мало работал, имею только поверхностное представление)

>Кстати, никто не в курсе, как десереализовать датасет по-быстрому? Сериализованный BinaryFormetter'ом десериализуется примерно 10-12 секунд. На диске занимает 9 метров

А заполняешь ты его как, сначал из бинари серилизуешь в xml или как,
я бы серилизовал сразу в xml и десерилизовывал из xml (dataset.ReadXml, WriteXml из стрима)...опять таки как вариант использовать асинхноссть заполнения датасета при условии, что серилизованный датасет у тебя упорядочен...еще как вариант посмотреть в сторону использования XmlReader/// вообще, выставил бы код десериализации своего датасета, было бы лучше..


Отправил NightWing в 12:06 02.02.2005[Ответить]
>> Не повыпендриваться здесь конечно не могли
>действительно, видно ты никак не смог сдержаться...;)...чел спросил, >ему постарались ответить.

Ты действительно считаешь набор английских слов, ничего не говорящих неангажированному оппоненту, ответом? Это субъективный момент, спорить не буду, хотелось бы просто у вопрошанта поинтересоваться, много ли ему это дало?


Отправил Dushes в 13:07 02.02.2005[Ответить]
а ты наверно решил все описание .net сюда впихнуть :)) и сократил до двух пунктов, не спорю, пунктики важные...но далеко не все...



Отправил Patrol в 18:44 02.02.2005[Ответить]
Какая разница КАК десереализовать, когда в памяти нужно развернуть объектрую структуру немеренного объема, построить DOM. Я Пашке уже советовал использовать SAX вместо DOM. Будет быстрее.
А совет про сразу XML из стрима - лажа. Откровенная.


Отправил Пaшкa в 19:25 02.02.2005[Ответить]
> Так по вашему выходит что это интерпритатор?

Нет, это не интерпрЕтатор. Точнее, интерпретатор в данном случае не подходящее слово.


Отправил Dushes в 09:24 03.02.2005[Ответить]
>...А совет про сразу XML из стрима - лажа. Откровенная

не буду спорить (не тестировал, такие объемы на клиента гонять имхо не очень красиво)...я просто предложил использовать заполнение адаптера через SqlCommand.ExecuteXmlReader, или опять таки попровать использовать асинхронное заполнение - но тут конечно все зависит от самой задачи и от архитуктуры приложения


Отправил Patrol в 18:56 03.02.2005[Ответить]
Вопрос был про _время_. А те методы, что предлагаешь ты - одно и то же. Ибо разворачивают DOM XML. Синхронно ли, асинхронно ли, десериализация ли, ReadXml ли - я не понимаю, в чем ты видишь существенную разницу. Делаться-то будет одно и то же :)
Пробовать, конечно, можно, но лучше - понимать ;)

Опять же, красиво или некрасиво определяется задачей..

И все же я бы предложил использовать SAX - методы ;) Оно будет существенно быстрее уже хотя бы потому, что не надо будет держать в памяти копию данных. XML-файл в данном случае будет просто базой данных. А еще можно разбить этот файл на несколько. Дейтасету все равно, а программисту приятно, в случае навигации прямо по файлам ;)


Отправил Dushes в 09:21 04.02.2005[Ответить]
> - я не понимаю, в чем ты видишь существенную разницу. Делаться-то будет одно и то же :) Пробовать, конечно, можно, но лучше - понимать ;)


Не хочется превращать все это дело во влейм;), но свой датасет я бы все таки заполнял через DataReader (ну или XmlReader - зависит от структуры датасета) (если бы вопрос конечно бы стоял о загрузке такого объема данных), но ни как не через SqlDataAdapter.Fill() (не могу сказать как Пашка его заполняет, но стандартно почему-то многие используют Fill того кода который наворачивают визарды студии)-используя DataReader реально получаешь однонаправленный поток со стороны сервера + он реально заточен для того чтобы в минимальный короткий срок за минимальное количество обращений к серверу получить данные, вынес бы это в асинхронный вызов делегата (прогрессик юсеру показать;)), при получении данных (while(DataReader.Read()){...} )ничто не мешает мне сделать многомерный массив строк (или объектов, тут надо покопать в сторону box!unbox), куда я помещу свои данные (реально это будет не копирование а создание указателя на уже имеющуюся валую из указанной колонки - операция веделения 4х байт на указатель всего-то навсего, при этом GC на полученный пул данных после закрытия ридера уже на сработает в виду наличия ссылки на них в самом приложении), получил данные, закрыл датаридер...ну и так далее, работаешь с массивом..но все это конечно тонкости реализации и еще раз повторюсь во избежание недоразумений - решение зависит от условий задачи...

ps: не надо мне объяснять про то как и во что разворачивается датасет;) Делаться то оно будет конечно одно и тоже, но разными методами..;)


Отправил Patrol в 11:02 04.02.2005[Ответить]
>>Не хочется превращать все это дело во влейм;),

не хочется - не превращай ;)
Ничего не хочу сказать о твоей компетенции, но того, что SqlDataAdapter.Fill() мало того, что в основе своей как раз и содержит работу с экземпляром IDataReader, использующий однонаправленный поток и т.д. ;), ты похоже просто не знаешь.
Рекомендую чего-нить поделать. И почитать. И еще поделать.

Как не знаешь и того, что SqlDataAdapter ну не используется для чтения XML-файла, ну никак не используется ;)

>>ничто не мешает мне сделать многомерный массив строк (или объектов, тут надо покопать в сторону box!unbox)
Что за лажа? Ты ЭТО используешь???? Многомерные массивы строк и объектов?? Ты вообще про ООП слыхал? ;) Ну хоть малость..

Обычно делается так:

1) Создается класс:
public class Product {
public Product (IDataReader reader) {
...
}

public ProductCollection GetList(..) {
ProductCollection coll = new ProductCollection();
...
while (reader.Read) {
coll.Add(new Product(reader));
}
...
}
}

2) Создается класс коллекции
public class ProductCollection : CollectionBase {
...
}

3). Все работает.

Чур тебя со своими массивами строк...

>>ps: не надо мне объяснять про то как и во что разворачивается датасет;)
Не надо, так не надо.. Не буду.. Просто посоветую посмотреть, как и что там делается, чтобы снова про адаптеры лажу не городить...

P.S. Рихрер это хорошо... Но он не один.. И столь увлеченно описывать базовые знания, такие как работу GC и боксинг при рассмотрении абсолютно другой проблемы - тоже признак того, тема еще в голове не улеглась, а впечатление оставила ;)


Отправил Пaшкa в 11:52 04.02.2005[Ответить]
Пробовал только короткие решения, пока не до этого.
А именно:

ds.ReadXml();
// ---

Stream stream = File.Open(...);
IFormatter formatter = new BinaryFormatter();
ds = formatter.Deserialize(stream) as DataSet;
stream.Close();

// ---
Вариант с SoapFormatter'ом тоже смотрел. Все варианты показывают время выполнения около 10-12 секунд.


Всё остальное (SAX, читать прямо в контрол из файла etc) не пробовал, так это не критичное на текущий момент место.


Отправил Dushes в 11:59 04.02.2005[Ответить]
Блин...уел...:))...даже расстроился

>>Ничего не хочу сказать о твоей компетенции, но того, что SqlDataAdapter.Fill() мало того, что в основе своей как раз и содержит работу с экземпляром IDataReader, использующий однонаправленный поток и т.д. ;), ты похоже просто не знаешь.
Рекомендую чего-нить поделать. И почитать. И еще поделать.

Во-первых, не сам SqlDataAdapter, а SqlCommand - это два РАЗНЫХ класса и никто не мешает использовать мне их вне SqlDataAdapter, во-вторых - если ты всегда работал с типизированным датасетом - то это не означает, что единственный вариант ;))) - датасет можно построить и на стороне клиента, если стоит вопрос быстрой закачки данных...как закачать и во-что, это совсем другой вопрос, наиболее оптимальный - построить указатели на данные из полученного однонаправленного пула...

В-третьих, при использовании Fill ты не имеешь однонаправленный поток - если ты только не используешь Fill из ридера ;))) - к чему собственно и вернулись...
если не веришь, покапайся сам в кодах
для примера
public abstract class DbDataAdapter : DataAdapter, ICloneable
{
public override int Fill(DataSet dataSet);
public int Fill(DataTable dataTable);
public int Fill(DataSet dataSet, string srcTable);
protected virtual int Fill(DataTable dataTable, IDataReader dataReader);
...

>>Как не знаешь и того, что SqlDataAdapter ну не используется для чтения XML-файла, ну никак не используется ;)
не помню чтобы говорил, ну да ладно, еще раз уел....

>>ничто не мешает мне сделать многомерный массив строк (или объектов, тут надо покопать в сторону box!unbox)
Что за лажа? Ты ЭТО используешь???? Многомерные массивы строк и объектов?? Ты вообще про ООП слыхал? ;) Ну хоть малость..

ой...ну надо же...массивы..как это пошло;) ...ООП - а что это;))) предприятие общепита?

[..выдранный кусок из учебника..уел ;)))...ну надо же, первый раз увидел коллекцию (это ты предложил запонить ее из ридера? или к чему? прикольно, если ты заполняешь коллекции из ридера, вот наверно сервере вешается;))) ), а то что она в общем случае хранит object - тебя не смушает и при его заполнении ты будешь иметь как минимум box на каждое значение, это вроде ничего;))) - ]

про массив: в данном случае ЛИЧНО Я рассматривал задачу с той точки, что на сторону клиента за минимальное время надо вернуть данные...только с этой...с этой точки зрения во время чтения из ОДНОНАПРАВЛЕННОГО потока ридера (while (rd.read())) мне нужно эти данные куда-то перегнать и освободить сервер- надеюсь, ты это понимаешь, иначе если я буду грузить к примеру в грид или еще не дай бог в коллекцию (не, ну приколько;))) ), то сервер просто умрет, + не дай бог количество клиентов критическое....сразу рой могилу...поэтому для такой цели (чтобы сразу же освободиться от сервера) я и предложил использовать массив...


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

P.S. Рихрер это хорошо ... Но он не один.. И столь увлеченно описывать базовые знания, такие как работу GC и боксинг при рассмотрении абсолютно другой проблемы - тоже признак того, тема еще в голове не улеглась, а впечатление оставила ;)
Рихрер? кто это? да ладно, понял я, кто это ;))) - но чувствуется мысль уверенного в своей правоте человека...надеюсь, не расстрою, если скажу что Рихтер не единственный писатель...не скрою, впечатления есть (только не от Рихтера), сам занимаюсь .net только с декабря, так что впечатления новы...спасибо..;)))


Отправил Пaшкa в 12:15 04.02.2005[Ответить]
Хотелось бы понять, что за сервер, который не вешается при создании n-мерного массива, но вешается при создании такой _простой_ коллекции.

Имхо разговор из серии что лучше в пхп использовать, $a-$b-$c или $a . '-' . $b . '-' . $c


Отправил Patrol в 12:24 04.02.2005[Ответить]
>>Во-первых, не сам SqlDataAdapter, а SqlCommand - это два РАЗНЫХ класса
Это ты к чему?
Метод Fill SqlDataAdapter'а САМ пользует IDataReader.. Что с тобой, молодой человек... Я достасточно знаю пространство имен System.Data :)
И если ты уж говоришь о кодах, то должен знать, что Fill(DataTable) и иже с ней использует внутренний метод.. что-то вроде FillFromComand или как-то так, где и вертится цикл по IDataReader...
Если я правильно помню названия функций..

>>если ты всегда работал с типизированным датасетом - то это не означает, что единственный вариант
Если начать с того, что я НИКОГДА не работаю с типизированным DataSet, то можно этим и закончить :) Ибо типизированный дейтасет - это костыль, слишком много минусов и ограничений.

>>как закачать и во-что, это совсем другой вопрос, наиболее оптимальный - построить указатели на данные из полученного однонаправленного пула...
Ты вообще понимаешь о чем я говорю? Я говорю о DOM-модели XML-дерева. Какие и при чем тут указатели? Ккакой нафик поток при чтении из файла??

>>прикольно, если ты заполняешь коллекции из ридера, вот наверно сервере вешается
Не понял мысли. Почему? И как надо заполнять коллекцию? :)

>>а то что она в общем случае хранит object - тебя не смушает и при его заполнении ты будешь иметь как минимум box на каждое значение, это вроде ничего
Нет, абсолютно не смущает. Во-первых, проблемы боксинга не такие уж и большие. Во вторых, класс Product ну никак не может не быть объектом :) Ибо он по определению не valueType :) Как и любой другой.

>>сам занимаюсь .net только с декабря, так что впечатления новы...спасибо
Оно и видно :) Мысли еще не пришли в порядок ;) Ничего, через пару лет начнешь понимать зачем нужны объекты и т.д. :)


Отправил Dushes в 12:31 04.02.2005[Ответить]
спасибо..вразумил...можно, я пойду? ;)


Отправил Patrol в 12:52 04.02.2005[Ответить]
Я не против ;)
Вообще подобные вопросы лучше обсуждать у нас на форуме: http://www.dotsite.ru/ :)

Ежли что - велкам :)


Отправил Dushes в 13:35 04.02.2005[Ответить]
to Пашка:
>Хотелось бы понять, что за сервер, который не вешается при создании n-мерного массива, но вешается при создании такой _простой_ коллекции.///

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

Есть еще XmlSerilizer класса - не знаю правда, можно ли его использовать в твоем случае, лично сам юзал только Binary и Soap...В XmlSerilizer придется другие методы переопределять насколько помню, на rsdn.ru был пример, но он щас завалился :((

>> Вообще подобные вопросы лучше обсуждать у нас на форуме: http://www.dotsite.ru/ :)
нечеловеческий сайт, когда первый раз заходил на него, осталось тягостное впечатление, не говори о нем никому ;)


Отправил Patrol в 13:49 04.02.2005[Ответить]
>>не знаю правда, можно ли его использовать в твоем случае
Большой-большой секрет: для сериализации DataSet в XML ничего переопределять не надо ;)
Он уже наследует ISerializable и IXmlSerializable :)
И класс уже [Serializable] ;)

Только вот проблемы скорости это не решит все по той же причине :(
Кстати, Паш, а если MSDE на клиентский комп ставить? ;)

>>нечеловеческий сайт, когда первый раз заходил на него, осталось тягостное впечатление, не говори о нем никому ;)
Нечеловеческие там только форумы (навигация) ;) И то только потому, что заняться никому времени нет.. ;)
А контент там содержащийся весьма человеческий и полезный ;)


Отправил Пaшкa в 14:14 04.02.2005[Ответить]
> Кстати, Паш, а если MSDE на клиентский комп ставить? ;)

Я уже думал над этим. Но наверное придётся у Ich'а их разработки баз данных покупать ;-)

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