[Форум] [Помощь] [Поиск] [Выйти] |
Добро пожаловать, User |
|
|
| ||
кто может без заумных слов объяснить шо оно такое и с чем его едят? В чем преимущества программирования под этот самый нет фреймворк. Желательно количество подколок типа а ты не знаешь?! Да ты ... свести к минимуму, если совсем нельзя без них :) |
| ||
http://msdn.microsoft.com/netframework/ |
| ||
Преимущества лучше перечислить в новшествах!технологиях: 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 |
| ||
> Серилизация в Binary!XML + SOAP Это как это? Я видел только BinaryFormatter и SoapFormatter. Кстати, никто не в курсе, как десереализовать датасет по-быстрому? Сериализованный BinaryFormetter'ом десериализуется примерно 10-12 секунд. На диске занимает 9 метров. |
| ||
Не повыпендриваться здесь конечно не могли. Вкратце, основных идеи 2: 1) Все языки программирования генерируют некий промежуточный MSIL код типа метаассемблера, типа джавовского байт-кода. Стандартно программа переводится в процессорный ассемблер только на этапе выполнения. Поэтому библиотеки возможно использовать во всех языках с сохранением всей метаинформации. 2) Написан сам .net framework - набор классов, реализующий практически все интерфейсы windows плюс многое иное. Поэтому программирование принципиально только объектно-ориентированное. Ну, ко всему этому - масса полезных дополнительных технологий, см. хотя бы выше. |
| ||
> NightWing 1) Так по вашему выходит что это интерпритатор? |
| ||
> Не повыпендриваться здесь конечно не могли действительно, видно ты никак не смог сдержаться...;)...чел спросил, ему постарались ответить. >Так по вашему выходит что это интерпритатор? можно даже назвать транслятором из одного языка в другой... блин, кстати, про слона то чуть не забыл ;) - 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/// вообще, выставил бы код десериализации своего датасета, было бы лучше.. |
| ||
>> Не повыпендриваться здесь конечно не могли >действительно, видно ты никак не смог сдержаться...;)...чел спросил, >ему постарались ответить. Ты действительно считаешь набор английских слов, ничего не говорящих неангажированному оппоненту, ответом? Это субъективный момент, спорить не буду, хотелось бы просто у вопрошанта поинтересоваться, много ли ему это дало? |
| ||
а ты наверно решил все описание .net сюда впихнуть :)) и сократил до двух пунктов, не спорю, пунктики важные...но далеко не все... |
| ||
Какая разница КАК десереализовать, когда в памяти нужно развернуть объектрую структуру немеренного объема, построить DOM. Я Пашке уже советовал использовать SAX вместо DOM. Будет быстрее. А совет про сразу XML из стрима - лажа. Откровенная. |
| ||
> Так по вашему выходит что это интерпритатор? Нет, это не интерпрЕтатор. Точнее, интерпретатор в данном случае не подходящее слово. |
| ||
>...А совет про сразу XML из стрима - лажа. Откровенная не буду спорить (не тестировал, такие объемы на клиента гонять имхо не очень красиво)...я просто предложил использовать заполнение адаптера через SqlCommand.ExecuteXmlReader, или опять таки попровать использовать асинхронное заполнение - но тут конечно все зависит от самой задачи и от архитуктуры приложения |
| ||
Вопрос был про _время_. А те методы, что предлагаешь ты - одно и то же. Ибо разворачивают DOM XML. Синхронно ли, асинхронно ли, десериализация ли, ReadXml ли - я не понимаю, в чем ты видишь существенную разницу. Делаться-то будет одно и то же :) Пробовать, конечно, можно, но лучше - понимать ;) Опять же, красиво или некрасиво определяется задачей.. И все же я бы предложил использовать SAX - методы ;) Оно будет существенно быстрее уже хотя бы потому, что не надо будет держать в памяти копию данных. XML-файл в данном случае будет просто базой данных. А еще можно разбить этот файл на несколько. Дейтасету все равно, а программисту приятно, в случае навигации прямо по файлам ;) |
| ||
> - я не понимаю, в чем ты видишь существенную разницу. Делаться-то будет одно и то же :) Пробовать, конечно, можно, но лучше - понимать ;) Не хочется превращать все это дело во влейм;), но свой датасет я бы все таки заполнял через DataReader (ну или XmlReader - зависит от структуры датасета) (если бы вопрос конечно бы стоял о загрузке такого объема данных), но ни как не через SqlDataAdapter.Fill() (не могу сказать как Пашка его заполняет, но стандартно почему-то многие используют Fill того кода который наворачивают визарды студии)-используя DataReader реально получаешь однонаправленный поток со стороны сервера + он реально заточен для того чтобы в минимальный короткий срок за минимальное количество обращений к серверу получить данные, вынес бы это в асинхронный вызов делегата (прогрессик юсеру показать;)), при получении данных (while(DataReader.Read()){...} )ничто не мешает мне сделать многомерный массив строк (или объектов, тут надо покопать в сторону box!unbox), куда я помещу свои данные (реально это будет не копирование а создание указателя на уже имеющуюся валую из указанной колонки - операция веделения 4х байт на указатель всего-то навсего, при этом GC на полученный пул данных после закрытия ридера уже на сработает в виду наличия ссылки на них в самом приложении), получил данные, закрыл датаридер...ну и так далее, работаешь с массивом..но все это конечно тонкости реализации и еще раз повторюсь во избежание недоразумений - решение зависит от условий задачи... ps: не надо мне объяснять про то как и во что разворачивается датасет;) Делаться то оно будет конечно одно и тоже, но разными методами..;) |
| ||
>>Не хочется превращать все это дело во влейм;), не хочется - не превращай ;) Ничего не хочу сказать о твоей компетенции, но того, что 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 и боксинг при рассмотрении абсолютно другой проблемы - тоже признак того, тема еще в голове не улеглась, а впечатление оставила ;) |
| ||
Пробовал только короткие решения, пока не до этого. А именно: ds.ReadXml(); // --- Stream stream = File.Open(...); IFormatter formatter = new BinaryFormatter(); ds = formatter.Deserialize(stream) as DataSet; stream.Close(); // --- Вариант с SoapFormatter'ом тоже смотрел. Все варианты показывают время выполнения около 10-12 секунд. Всё остальное (SAX, читать прямо в контрол из файла etc) не пробовал, так это не критичное на текущий момент место. |
| ||
Блин...уел...:))...даже расстроился >>Ничего не хочу сказать о твоей компетенции, но того, что 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 только с декабря, так что впечатления новы...спасибо..;))) |
| ||
Хотелось бы понять, что за сервер, который не вешается при создании n-мерного массива, но вешается при создании такой _простой_ коллекции. Имхо разговор из серии что лучше в пхп использовать, $a-$b-$c или $a . '-' . $b . '-' . $c |
| ||
>>Во-первых, не сам SqlDataAdapter, а SqlCommand - это два РАЗНЫХ класса Это ты к чему? Метод Fill SqlDataAdapter'а САМ пользует IDataReader.. Что с тобой, молодой человек... Я достасточно знаю пространство имен System.Data :) И если ты уж говоришь о кодах, то должен знать, что Fill(DataTable) и иже с ней использует внутренний метод.. что-то вроде FillFromComand или как-то так, где и вертится цикл по IDataReader... Если я правильно помню названия функций.. >>если ты всегда работал с типизированным датасетом - то это не означает, что единственный вариант Если начать с того, что я НИКОГДА не работаю с типизированным DataSet, то можно этим и закончить :) Ибо типизированный дейтасет - это костыль, слишком много минусов и ограничений. >>как закачать и во-что, это совсем другой вопрос, наиболее оптимальный - построить указатели на данные из полученного однонаправленного пула... Ты вообще понимаешь о чем я говорю? Я говорю о DOM-модели XML-дерева. Какие и при чем тут указатели? Ккакой нафик поток при чтении из файла?? >>прикольно, если ты заполняешь коллекции из ридера, вот наверно сервере вешается Не понял мысли. Почему? И как надо заполнять коллекцию? :) >>а то что она в общем случае хранит object - тебя не смушает и при его заполнении ты будешь иметь как минимум box на каждое значение, это вроде ничего Нет, абсолютно не смущает. Во-первых, проблемы боксинга не такие уж и большие. Во вторых, класс Product ну никак не может не быть объектом :) Ибо он по определению не valueType :) Как и любой другой. >>сам занимаюсь .net только с декабря, так что впечатления новы...спасибо Оно и видно :) Мысли еще не пришли в порядок ;) Ничего, через пару лет начнешь понимать зачем нужны объекты и т.д. :) |
| ||
спасибо..вразумил...можно, я пойду? ;) |
| ||
Я не против ;) Вообще подобные вопросы лучше обсуждать у нас на форуме: http://www.dotsite.ru/ :) Ежли что - велкам :) |
| ||
to Пашка: >Хотелось бы понять, что за сервер, который не вешается при создании n-мерного массива, но вешается при создании такой _простой_ коллекции./// убежал я от первоначальной темы..пардон..речь шла вообще о се/десерилизации класса в/из файла, не помню почему но почему-то подумал что шла речь о десериализации класса сразу из потока со стороны сервера, наверно, с утра читал :) Есть еще XmlSerilizer класса - не знаю правда, можно ли его использовать в твоем случае, лично сам юзал только Binary и Soap...В XmlSerilizer придется другие методы переопределять насколько помню, на rsdn.ru был пример, но он щас завалился :(( >> Вообще подобные вопросы лучше обсуждать у нас на форуме: http://www.dotsite.ru/ :) нечеловеческий сайт, когда первый раз заходил на него, осталось тягостное впечатление, не говори о нем никому ;) |
| ||
>>не знаю правда, можно ли его использовать в твоем случае Большой-большой секрет: для сериализации DataSet в XML ничего переопределять не надо ;) Он уже наследует ISerializable и IXmlSerializable :) И класс уже [Serializable] ;) Только вот проблемы скорости это не решит все по той же причине :( Кстати, Паш, а если MSDE на клиентский комп ставить? ;) >>нечеловеческий сайт, когда первый раз заходил на него, осталось тягостное впечатление, не говори о нем никому ;) Нечеловеческие там только форумы (навигация) ;) И то только потому, что заняться никому времени нет.. ;) А контент там содержащийся весьма человеческий и полезный ;) |
| ||
> Кстати, Паш, а если MSDE на клиентский комп ставить? ;) Я уже думал над этим. Но наверное придётся у Ich'а их разработки баз данных покупать ;-) На самом деле, времени уже нету переделывать что-либо. И это пока не критичное место. |