Массивы в C#
От: ivan23i  
Дата: 23.08.03 19:04
Оценка:
Я новичок в C# да и вообще в языках линейки C
Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где
индексом выступает не число а слово.
Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый
индекс — числовой а второй ассоциативный или наоборот.
И к примеру така я ситуация что есть много мерный масси, а данные в нем
смешанного типа, т.е. могут быть как и числого формата(int) так и
тестового(string). Как здесь быть, потому что если мы создаем массив то уже
срзу задаем ему тип, или выхода нет?
Posted via RSDN NNTP Server 1.7 beta
Re: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.08.03 08:33
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где

I>индексом выступает не число а слово.

Hashtable

I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый

I>индекс — числовой а второй ассоциативный или наоборот.

Hashtable[]

I>И к примеру така я ситуация что есть много мерный масси, а данные в нем

I>смешанного типа, т.е. могут быть как и числого формата(int) так и
I>тестового(string). Как здесь быть, потому что если мы создаем массив то уже
I>срзу задаем ему тип, или выхода нет?

object[]
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
AVK Blog
Re[2]: Массивы в C#
От: ivan23i  
Дата: 24.08.03 11:20
Оценка:
А можно о Hashtable[] и о object[] с примером?
"AndrewVK" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362652@news.rsdn.ru...
From: AndrewVK модератор

Здравствуйте, ivan23i, Вы писали:

I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где

I>индексом выступает не число а слово.

Hashtable

I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый

I>индекс — числовой а второй ассоциативный или наоборот.

Hashtable[]

I>И к примеру така я ситуация что есть много мерный масси, а данные в нем

I>смешанного типа, т.е. могут быть как и числого формата(int) так и
I>тестового(string). Как здесь быть, потому что если мы создаем массив то уже
I>срзу задаем ему тип, или выхода нет?

object[]
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
Оценить
Posted via RSDN NNTP Server 1.7 beta
Re[3]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.08.03 11:41
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>А можно о Hashtable[] и о object[] с примером?


Ну блин халавщики, даже MSDN не ситают .

object[] годится для хранения разнородных данных. Фокус в том что любой тип в дотнете приводится к object.

object[] polyArray = new object[3];
polyArray[0] = "some str";
polyArray[1] = 12;
polyArray[2] = DateTime.Now;

string str = (string)polyArray[0];


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

Hashtable ht = mew Hashtable();
ht.Add("one", 1);
ht.Add("two", 2);
ht.Add("three", 3);

int oneVal = ht["one"];


Если тебе нужно чтобы старший индекс был числом то создаешь массив хеш-таблиц. Тогда выборка значения будет примерно такой:

Hashtable[] data = new Hashtable[3];
...
object val = data[2]["key"];


Если наоборот то в хештаблице храни массивы

Hashtable ht = new Hashtable();
ht.Add("key", new object[3]);
...
object val = ((object)ht["key"])[2];


Чтобы избавиться от приведения типов можно отнаследоваться от DictionaryBase и написать тпизированную хеш-таблицу.

Ну и еще один вариант — на основе набора индексов создавать комбинированный ключ, например "1|two|25.07.99" и хранить значение в единственной хеш-таблице. Для доступав по индексу придется написать свою обертку, генерирующую такой ключ.
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
AVK Blog
Re[4]: Массивы в C#
От: ivan23i  
Дата: 24.08.03 12:56
Оценка:
Хм, не знаю насчте халявшиком.
В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.
Но все равно спасибо
"AndrewVK" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362733@news.rsdn.ru...
From: AndrewVK модератор

Здравствуйте, ivan23i, Вы писали:

I>А можно о Hashtable[] и о object[] с примером?


Ну блин халавщики, даже MSDN не ситают .

object[] годится для хранения разнородных данных. Фокус в том что любой тип в дотнете приводится к object.

object[] polyArray = new object[3];
polyArray[0] = "some str";
polyArray[1] = 12;
polyArray[2] = DateTime.Now;

string str = (string)polyArray[0];


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

Hashtable ht = mew Hashtable();
ht.Add("one", 1);
ht.Add("two", 2);
ht.Add("three", 3);

int oneVal = ht["one"];


Если тебе нужно чтобы старший индекс был числом то создаешь массив хеш-таблиц. Тогда выборка значения будет примерно такой:

Hashtable[] data = new Hashtable[3];
...
object val = data[2]["key"];


Если наоборот то в хештаблице храни массивы

Hashtable ht = new Hashtable();
ht.Add("key", new object[3]);
...
object val = ((object)ht["key"])[2];


Чтобы избавиться от приведения типов можно отнаследоваться от DictionaryBase и написать тпизированную хеш-таблицу.

Ну и еще один вариант — на основе набора индексов создавать комбинированный ключ, например "1|two|25.07.99" и хранить значение в единственной хеш-таблице. Для доступав по индексу придется написать свою обертку, генерирующую такой ключ.
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
Оценить
Posted via RSDN NNTP Server 1.7 beta
Re[4]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.03 13:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну блин халавщики, даже MSDN не ситают .


Да хрен с ним МСДН-ом, но вообще ничего не знать про базовые алгоритмы и структуры данных! Поубывалъ бю.

Советую почитать вот это — http://rsdn.ru/article/alg/bintree/hash.xml
Автор(ы):
, да и вообще вот это — http://rsdn.ru/article/alg/bintree.xml
Автор(ы):

AVL-деревья, сортировка данных в массиве, хеширование.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.03 13:38
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.


В Шарпе есть понятие массив массивов, а есть многомерный массив. Точ то ты спрашивал (про ассоциативные массивы) вообще к языку не оносится. А то, что тебе показывал АВК — это как раз массивы одномерные (временами вложенные).

PS

И, пожалуйста, не оверквоть так сильно.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Массивы в C#
От: ivan23i  
Дата: 24.08.03 13:56
Оценка:
ХМ, разве масисв массивов не одно и тоже что и много мерный массив? Стуктура то таже.
А убивать никого не надо, все мы учимся.
"VladD2" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362814@news.rsdn.ru...
From: VladD2 rsdn www.optim.ru/cs


Здравствуйте, ivan23i, Вы писали:

I>В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.


В Шарпе есть понятие массив массивов, а есть многомерный массив. Точ то ты спрашивал (про ассоциативные массивы) вообще к языку не оносится. А то, что тебе показывал АВК — это как раз массивы одномерные (временами вложенные).

PS

И, пожалуйста, не оверквоть так сильно.
... << RSDN@Home 1.1 beta 1 >>
Оценить
Posted via RSDN NNTP Server 1.7 beta
Re[6]: Массивы в C#
От: ivan23i  
Дата: 24.08.03 13:59
Оценка:
Лучше бы просто обяснили понятным языком новичку, просто все то оно конечно хорошо, но пока языком пару месяцев не попользуешся почти любое руковдство или короткие ответы не помогут по причине не хватки знаний.
Posted via RSDN NNTP Server 1.7 beta
Re[7]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.03 16:48
Оценка:
Здравствуйте, ivan23i, Вы писали:

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


Ну, не знаю я с С++ и Дельфи за пять минут перелез. Конечно тонкости есть везде, но хэш-таблицы они и в африке хэш-таблицы (правда в Дельфи они появились только в шестерке).
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.08.03 16:48
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>ХМ, разве масисв массивов не одно и тоже что и много мерный массив?


Да. Это разные вещи. Вот смотри:
// Массива массивов интов. Инициализируется пустым массивом.
int[][] aryOfAryOfInt = new int[3][];

// А вот это уже многомерный массив
int[,][] aryIntMatrix = new int[3,3];

// А вот разница
aryOfAryOfInt[0] = new int[2];
aryOfAryOfInt[1] = new int[1000];
aryOfAryOfInt[2] = null;

aryOfAryOfInt[0][1] = 123;

aryIntMatrix[0,1] = 123;


I>Стуктура то таже.


Нет. Как видишь массивы массивов гибче. К тому же с обычными массивами (в том числе и вложенными) дотнет работает командами MSIL-а которые переводятся непосредственно в команды процессора, а с многомерными работа идет через функции (не видимо для программиста). Это замедляет код.

PS

И еще раз говорю. Грохай все цитаты которые не нужны для понимания контекста вопроса/ответа.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Массивы в C#
От: Олег Гашев
Дата: 24.08.03 17:40
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где

I>индексом выступает не число а слово.
I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый
I>индекс — числовой а второй ассоциативный или наоборот.

Пример:


using System;
using System.Collections;

namespace ArrayEx
{
    class Class1
    {
        
        [STAThread]
        static void Main(string[] args)
        {
            Hashtable[] hash;
            hash=new Hashtable[3];
            hash[0]=new Hashtable();
            hash[0].Add("First",23);
            
            Console.WriteLine(hash[0]["First"]);
        }
    }
}
Либо я найду путь, либо проложу его. © Свифт
Re[8]: Массивы в C#
От: ivan23i  
Дата: 24.08.03 19:16
Оценка:
Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.
Posted via RSDN NNTP Server 1.7 beta
Re[9]: Массивы в C#
От: ExtraLamer  
Дата: 24.08.03 21:54
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.


Размерность для массивов — всегда надо указывать! Ах, как было бы хорошо не указывать размер . Но "безразмерные" массивы всё же — существуют — это ArrayList.
Re[9]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 00:23
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.


Это скриптовые языки. У них свои особенности. Они очень ограничены и многое им не дано. Но и там, и там есть библиотеки расширения и хэш-таблицы среди них точно имеются.

Вооще, я бы посоветова прочесть какую-нибудь толковую книку по программированию на компилируюемых языках. Раз уж выбрал Шарп, то лучше на нем. И еще очень полезно прочесть книгу по алгоритмам и структурам данных, ну, или на худой конец статью на которую я указывал.

Главное же нужно запомнить, что основное различие между компилируемыми языками и скриптовыми в том, что в сам язык обычно встроен минимальный набор самых необходимых действий. Все остальное в библиотеках. Ну, и нужно привыкнуть к тому, что все теперь типизировано и для решения проблем нужно искать (или писать свой) класс.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Массивы в C#
От: ivan23i  
Дата: 25.08.03 04:34
Оценка:
Хеш-таблиц там точно нет, если бы были то я бы думаю что сталкивался.
Статью прочту обязательно.
А что касаемо книги, купил себе C# и платформа .Net Эндрю Троелсена — r сожелению не все подробно расписано. Поэтому что не понятно то и спрашиваю. Я думаю не смертельно же если человеку что-то не понятно. помоему это хорошо что есть вопросы — значит он думает.
Если не сложно посовеетуй книжку по алгоритмам и структурам данных.
Ну а ктому что все типизированно. начинаю привыкать. Не знаю просто мне почему т понравился C#, да и для разработки КИС он помоему самое подходящее решение!
Posted via RSDN NNTP Server 1.7 beta
Re[9]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.08.03 06:49
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать


Значит там внутри аналог нетовского ArrayList. Ему вот тоже ни размерность ни тип указывать не нужно.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[11]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.08.03 06:52
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Хеш-таблиц там точно нет, если бы были то я бы думаю что сталкивался.


Точно есть

An array in PHP is actually an ordered map. A map is a type that maps values to keys. This type is optimized in several ways, so you can use it as a real array, or a list (vector), hashtable (which is an implementation of a map), dictionary, collection, stack, queue and probably more.

... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[8]: Массивы в C#
От: gbush  
Дата: 25.08.03 10:43
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Нет. Как видишь массивы массивов гибче. К тому же с обычными массивами (в том числе и вложенными) дотнет работает командами MSIL-а которые переводятся непосредственно в команды процессора, а с многомерными работа идет через функции (не видимо для программиста). Это замедляет код.


Но jagged массивы не соответствуют CLS
Все хорошо кончается, что кончается ещё лучше...
Re[9]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.08.03 12:29
Оценка:
Здравствуйте, gbush, Вы писали:

G>Но jagged массивы не соответствуют CLS


Но это не мешает создать такой массив ручками и быть полностью CLS-compliant
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[11]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 14:20
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Я думаю не смертельно же если человеку что-то не понятно. помоему это хорошо что есть вопросы — значит он думает.




I>Если не сложно посовеетуй книжку по алгоритмам и структурам данных.


Была одна книжка... к сожалению не помню как назыается. Там били алгоритмы на VB. Главное достоинство — очень доходчивое изложение и максимально простые примеры. Естественно на ВБ, что заставит изучить еще один язык. Но — это не такая большая проблема. Во-первых, ВБ очень простой язык. Во-вторых, после второго языка изучение остальных (того же типа, например, после перла изучать С++ тяжеловато, а после С++ очень непросто понять Пролог) дается очень легко.

I>Ну а ктому что все типизированно. начинаю привыкать. Не знаю просто мне почему т понравился C#, да и для разработки КИС он помоему самое подходящее решение!


Да для разработки прикладных систем он то что нужно. Надежно и быстро. Но учить в нем нужно много чего. Даже собственно не в нем, а в библиотеках и дотнете. За-то скорость (простота) разработки и качество выше чем у большинства конкурентов.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 14:20
Оценка:
Здравствуйте, gbush, Вы писали:

G>Но jagged массивы не соответствуют CLS


Запрета на то, чтобы элементом массива был другой массив нет. Другое дело, что на имеющихся языках (С++ и ВБ) с такими массивами придется повазиться. Там они доступны только через АПИ.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Массивы в C#
От: ExtraLamer  
Дата: 25.08.03 16:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ivan23i, Вы писали:


I>>Я думаю не смертельно же если человеку что-то не понятно. помоему это хорошо что есть вопросы — значит он думает.


VD>


I>>Если не сложно посовеетуй книжку по алгоритмам и структурам данных.


VD>Была одна книжка... к сожалению не помню как назыается. Там били алгоритмы на VB. Главное достоинство — очень доходчивое изложение и максимально простые примеры. Естественно на ВБ, что заставит изучить еще один язык. Но — это не такая большая проблема. Во-первых, ВБ очень простой язык. Во-вторых, после второго языка изучение остальных (того же типа, например, после перла изучать С++ тяжеловато, а после С++ очень непросто понять Пролог) дается очень легко.


C VB на C# легко переходить, особенно в свете то что VB.Net резко отличается от VB6. А вот с С# на С++ — не очень. Да и не хочется(почему то) ...
Re[8]: Массивы в C#
От: ExtraLamer  
Дата: 25.08.03 16:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ivan23i, Вы писали:


I>>ХМ, разве масисв массивов не одно и тоже что и много мерный массив?


VD>Да. Это разные вещи. Вот смотри:

VD>
VD>// Массива массивов интов. Инициализируется пустым массивом.
VD>int[][] aryOfAryOfInt = new int[3][];

VD>// А вот это уже многомерный массив
VD>int[,][] aryIntMatrix = new int[3,3];

VD>// А вот разница
VD>aryOfAryOfInt[0] = new int[2];
VD>aryOfAryOfInt[1] = new int[1000];
VD>aryOfAryOfInt[2] = null;

VD>aryOfAryOfInt[0][1] = 123;

VD>aryIntMatrix[0,1] = 123;
VD>


Инетересно а можно создать Массив Массивов Массивов? Что то вроде int [][][] CFG2 = new int [x][][]. Я пытался — что то не чего не выходит. Интересно как его инициализировать в конструкторе?
Re[12]: Массивы в C#
От: ivan23i  
Дата: 25.08.03 17:05
Оценка:
Спассибо за поправку
Точно есть
Posted via RSDN NNTP Server 1.6
Re[13]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 19:42
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>C VB на C# легко переходить, особенно в свете то что VB.Net резко отличается от VB6.


Какая-то странная логика. ВБ6 отличается от ВБ7 куда меньше чем Шарп от ВБ6.

EL>А вот с С# на С++ — не очень.


А. Ну, ты вот это раскажи тем кто переходит.

EL>Да и не хочется(почему то) ...


Кому как. А вот мне что-то на плюсах все меньше и меньше хочется писать. Еще бы шаблоны и так по мелочи, и про плюсы можно бы было начать забывать. Хотя конечно каждому свое...
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 19:42
Оценка: 3 (1)
Здравствуйте, ExtraLamer, Вы писали:

EL>Инетересно а можно создать Массив Массивов Массивов?


А в чем проблема? Массив это тип, а значит можно сделать из него элемент массива. Вот только обычно смысла в такой вложенности нет.

EL> Что то вроде int [][][] CFG2 = new int [x][][]. Я пытался — что то не чего не выходит. Интересно как его инициализировать в конструкторе?


int[][][] aiii = new int[][][]
{
    new int[][]
    {
        new int[]{ 1, 2, 3 },
        new int[]{ 4, 5, 6 },
        new int[]{ 7, 8, 9 }
    },
    new int[][]
    {
        new int[]{ 1, 2, 3 },
        new int[]{ 4, 5, 6 },
        new int[]{ 7, 8, 9 }
    }
};

Console.WriteLine("Первый уровень.");
foreach(int[][] aii in aiii)
{
    Console.WriteLine("Второй уровень.");
    foreach(int[] ai in aii)
    {
        Console.WriteLine("Третий уровень.");
        foreach(int i in ai)
            Console.Write(i + "\t");
        Console.WriteLine();
    }
}
Console.WriteLine("Нажимите Enter зачем-нибудь...");
Console.ReadLine();


Кстати, инициализация реально идет в рантайме. Жертвы крутому рантайму.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Массивы в C#
От: Воронков Василий Россия  
Дата: 25.08.03 19:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>C VB на C# легко переходить, особенно в свете то что VB.Net резко отличается от VB6.

VD>Какая-то странная логика. ВБ6 отличается от ВБ7 куда меньше чем Шарп от ВБ6.

Это да.

EL>>А вот с С# на С++ — не очень.

VD>А. Ну, ты вот это раскажи тем кто переходит.

А что, кто-то переходит? В смысле начинает изучать с++ с нуля, под дотнетом — или как?

EL>>Да и не хочется(почему то) ...

VD>Кому как. А вот мне что-то на плюсах все меньше и меньше хочется писать. Еще бы шаблоны и так по мелочи, и про плюсы можно бы было начать забывать. Хотя конечно каждому свое...

Да, но не стоит забывать, что есть ведь не только прикладная разработка.
... << RSDN@Home 1.1 beta 1 >>
Re[15]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.08.03 19:55
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А что, кто-то переходит? В смысле начинает изучать с++ с нуля, под дотнетом — или как?


Не. Тем кто с С++ пытается на Шарп перейти. Мату обычно...

ВВ>Да, но не стоит забывать, что есть ведь не только прикладная разработка.


Все разработки к чему-то прикладываются. Ну, драйверы, ну, ОС, ну, реалтайм-задачи. Остальное без проблем пишется на дотнете.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Массивы в C#
От: Воронков Василий Россия  
Дата: 25.08.03 20:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все разработки к чему-то прикладываются.




VD>Ну, драйверы, ну, ОС, ну, реалтайм-задачи. Остальное без проблем пишется на дотнете.


Не знаю, что-то последнее время я начинаю сомневаться в том, что дотнет будет господствовать "на столе". В вебе — это да. А вот для настольных приложений. Уже ведь "второе поколение", так сказать, близится к концу, а что из настольного было на дотнете написано? Даже МС как-то не торопится. Как бы не разделил он в этом плане участь джавы...
... << RSDN@Home 1.1 beta 1 >>
Re[10]: Массивы в C#
От: ExtraLamer  
Дата: 25.08.03 23:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>Инетересно а можно создать Массив Массивов Массивов?


VD>А в чем проблема? Массив это тип, а значит можно сделать из него элемент массива. Вот только обычно смысла в такой вложенности нет.


EL>> Что то вроде int [][][] CFG2 = new int [x][][]. Я пытался — что то не чего не выходит. Интересно как его инициализировать в конструкторе?


VD>
VD>int[][][] aiii = new int[][][]
VD>{
VD>    new int[][]
VD>    {
VD>        new int[]{ 1, 2, 3 },
VD>        new int[]{ 4, 5, 6 },
VD>        new int[]{ 7, 8, 9 }
VD>    },
VD>    new int[][]
VD>    {
VD>        new int[]{ 1, 2, 3 },
VD>        new int[]{ 4, 5, 6 },
VD>        new int[]{ 7, 8, 9 }
VD>    }
VD>};

VD>Console.WriteLine("Первый уровень.");
VD>foreach(int[][] aii in aiii)
VD>{
VD>    Console.WriteLine("Второй уровень.");
VD>    foreach(int[] ai in aii)
VD>    {
VD>        Console.WriteLine("Третий уровень.");
VD>        foreach(int i in ai)
VD>            Console.Write(i + "\t");
VD>        Console.WriteLine();
VD>    }
VD>}
VD>Console.WriteLine("Нажимите Enter зачем-нибудь...");
VD>Console.ReadLine();
VD>


спасибо за ответ. Такая форма записи массива хоть и более понятна, но менее гибка, инициализировать всё же лучше будет в конструкторе (по крайней мере моя программа этого требует). Методом тыка всё таки удалось создать Массив_Массивов_Массивов, с инициализацией в конструкторе. Хотя синтаксис весьма странный, особенно не понравилось обьявления второго уровня. исходник внизу.

VD>Кстати, инициализация реально идет в рантайме. Жертвы крутому рантайму.


В каком смысле?


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Arrays_of_Arrays_of_Arrays
{
    
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button button1;

        public int[][][] aiii = new int[2][][];
    
        public Form1()
        {
            // Первый уровень ...
            aiii [0]  = new int[2][];
            aiii [1]  = new int[3][];
                        
            // Второй уровень ...
                        
            // aiii [0]:
            // 1
            aiii [0][0]  = new int[2];
            // 2
            aiii [0][1]  = new int[1];
            
            // aiii [1]:
            // 3
            aiii [1][0]  = new int[3];
            // 4
            aiii [1][1]  = new int[2];
            // 5
            aiii [1][2]  = new int[1];
            
            // Третий уровень ...

            // Заполняем элементами
            // 1
            aiii[0][0][0] = 1;
            aiii[0][0][1] = 2;
            // 2
            aiii[0][1][0] = 3;
            // 3
            aiii[1][0][0] = 4;
            aiii[1][0][1] = 5;
            aiii[1][0][2] = 6;
            // 4
            aiii[1][1][0] = 7;
            aiii[1][1][1] = 8;
            // 5
            aiii[1][2][0] = 9;
            
            InitializeComponent();
        }

        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(160, 64);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(56, 56);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 265);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.ResumeLayout(false);

        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            /*
            типа тут печать массива должна была быть ...
            */
            
            // Application.Exit();
            
            //    Console.WriteLine("Нажимите Enter зачем-нибудь...");
            //    Console.ReadLine();
        }
        
    }
}
Re[14]: Массивы в C#
От: ExtraLamer  
Дата: 25.08.03 23:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>C VB на C# легко переходить, особенно в свете то что VB.Net резко отличается от VB6.


VD>Какая-то странная логика. ВБ6 отличается от ВБ7 куда меньше чем Шарп от ВБ6.


К сожалению отличается — VB7 делали, как известно с расчётом под MSIL, тут переменные variant — не пройдут. Так что когда стал выбор у любителей VB — между VB7 и С# то многие, перешли на C#. Так как VB7 и С# — различаются только синтаксисом, а так — одно и то же. Кто му же многим понравилось что в C# отсутствуют (точнее: они там есть но обходится без них попроще, чем обходится без них на С++) указатели(Все VB программисты — вздрогнули ).

EL>>А вот с С# на С++ — не очень.


VD>А. Ну, ты вот это раскажи тем кто переходит.


EL>>Да и не хочется(почему то) ...


VD>Кому как. А вот мне что-то на плюсах все меньше и меньше хочется писать. Еще бы шаблоны и так по мелочи, и про плюсы можно бы было начать забывать. Хотя конечно каждому свое...


Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.
Re[15]: Массивы в C#
От: WFrag США  
Дата: 26.08.03 03:13
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.


Во-первых, добрался. Как ты сам заметил — это mono.
А во-вторых, Ximian-а купил не SUN, а Novell (читать тут). И mono сворачивать они не собираются, а наоборот, обещают развивать.
Re[15]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 05:36
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>К сожалению отличается — VB7 делали, как известно с расчётом под MSIL, тут переменные variant — не пройдут. Так что когда стал выбор у любителей VB — между VB7 и С# то многие, перешли на C#. Так как VB7 и С# — различаются только синтаксисом, а так — одно и то же. Кто му же многим понравилось что в C# отсутствуют (точнее: они там есть но обходится без них попроще, чем обходится без них на С++) указатели(Все VB программисты — вздрогнули ).


Отличается не только синтаксисом. В VB7 многое оставили не то чтобы для совместимости не то чтобы с VB6, а скорее с программистами на VB6 . Тут тебе и модули и прочая фигня. К тому же во многих случаях в VB7 осуществляется автоматическое обратное приведение к типу, что может весьма серьезно повлиять на дизайн всего приложения. Там и шаблоны-то по большому счету не так уж нужны.

EL>>>А вот с С# на С++ — не очень.


VD>>А. Ну, ты вот это раскажи тем кто переходит.


EL>>>Да и не хочется(почему то) ...


VD>>Кому как. А вот мне что-то на плюсах все меньше и меньше хочется писать. Еще бы шаблоны и так по мелочи, и про плюсы можно бы было начать забывать. Хотя конечно каждому свое...


EL>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.


Вообще добрался, а вот приживется ли... А оно тебе нужно?
... << RSDN@Home 1.1 beta 1 >>
Re[15]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 07:11
Оценка: :)
Здравствуйте, ExtraLamer, Вы писали:

EL>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN.


Блин, как в анекдоте. Во-первых не Sun, а Novell, во-вторых разработку mono собираются не закрывать а наоборот финансировать.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[17]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.08.03 08:30
Оценка:
Hello, Воронков!
You wrote on Mon, 25 Aug 2003 20:14:40 GMT:

хъ
Согласен.
Еще не скоро дотнет будет у каждого юзера на машине, это раз.
Два — производительность. Я как-то писал програмульку, которая заливает
содержимое файловой системы (без собственно данных, просто атрибуты) в БД.
Это было нечто! Programm files заливался часов 5-6!
WTL для лекгих клиентов рулит!

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[16]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.08.03 08:32
Оценка:
Hello, Воронков!
You wrote on Tue, 26 Aug 2003 05:36:46 GMT:

хъ
ВВ> Отличается не только синтаксисом. В VB7 многое оставили не то чтобы для
ВВ> совместимости не то чтобы с VB6, а скорее с программистами на VB6
ВВ> . Тут тебе и модули и прочая фигня. К тому же во многих случаях в VB7
ВВ> осуществляется автоматическое обратное приведение к типу, что
может
ВВ> весьма серьезно повлиять на дизайн всего приложения.

Не понял.

хъ

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[18]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 09:12
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Еще не скоро дотнет будет у каждого юзера на машине, это раз.


При теперешних размерах дистрибутивов не особо страшно. Да и будет он достаточно скоро, как начнут дозревать первые коробочные продукты на нем.

AS>Два — производительность. Я как-то писал програмульку, которая заливает

AS>содержимое файловой системы (без собственно данных, просто атрибуты) в БД.
AS>Это было нечто! Programm files заливался часов 5-6!

И при чем тут дотнет? У тебя на работу с БД и диском и уходит основное время, а управляемый код скорее всего занимает десятые доли процента.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[17]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 11:39
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Hello, Воронков!

AS>You wrote on Tue, 26 Aug 2003 05:36:46 GMT:

AS>хъ

ВВ>> Отличается не только синтаксисом. В VB7 многое оставили не то чтобы для
ВВ>> совместимости не то чтобы с VB6, а скорее с программистами на VB6
ВВ>> . Тут тебе и модули и прочая фигня. К тому же во многих случаях в VB7
ВВ>> осуществляется автоматическое обратное приведение к типу, что
AS>может
ВВ>> весьма серьезно повлиять на дизайн всего приложения.

AS>Не понял.



Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Module Module1

    Sub Main()
        Dim AInst As New A
        Dim OInst As New Object
        OInst = AInst

        OInst.MyFuckingMethod() 'Sic!

    End Sub

End Module

Public Class A
    Public Sub MyFuckingMethod()
        Console.WriteLine("Some shit")
        Console.ReadLine()
    End Sub
End Class
... << RSDN@Home 1.1 beta 1 >>
Re[18]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 11:39
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Hello, Воронков!

AS>You wrote on Mon, 25 Aug 2003 20:14:40 GMT:

AS>хъ

AS>Согласен.
AS>Еще не скоро дотнет будет у каждого юзера на машине, это раз.
AS>Два — производительность. Я как-то писал програмульку, которая заливает
AS>содержимое файловой системы (без собственно данных, просто атрибуты) в БД.
AS>Это было нечто! Programm files заливался часов 5-6!
AS>WTL для лекгих клиентов рулит!

Честно говоря, я-то как раз думаю, что с производительностью у дотнета вполне нормально. Тут у меня нареканий даже нет. Вспомни, какое было раньше одно из самых популярных средств разработки — VB6. А у него как с производительностью? С до-диезом даже сравивать смешно.
К тому же мощность компов имеет склонность удваиваться каждые 18 месяцев.

Тут скорее об отношении речь. Меня вот действительно беспокоит тот факт, что настольные плаги на дотнете что-то не особенно торопятся писать — я имею в виду проги широкого масштаба, разумеется.
... << RSDN@Home 1.1 beta 1 >>
Re[8]: Массивы в C#
От: mihailik Украина  
Дата: 26.08.03 12:59
Оценка:
VD>Ну, не знаю я с С++ и Дельфи за пять минут перелез. Конечно тонкости есть везде, но хэш-таблицы они и в африке хэш-таблицы (правда в Дельфи они появились только в шестерке).

Действительно появились? Вот чёрт, а я и не знал. Как называется?
... << RSDN@Home 1.1 beta 1 >>
Re[10]: Массивы в C#
От: mihailik Украина  
Дата: 26.08.03 12:59
Оценка:
I>>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.

VD>Это скриптовые языки. У них свои особенности. Они очень ограничены и многое им не дано. Но и там, и там есть библиотеки расширения и хэш-таблицы среди них точно имеются.


Насколько я слышал, хеш-таблицы именно в Perl особенно прижились.
... << RSDN@Home 1.1 beta 1 >>
Re[18]: Массивы в C#
От: mihailik Украина  
Дата: 26.08.03 12:59
Оценка: :)
AS>Это было нечто! Programm files заливался часов 5-6!

При желании можно и на все восемь растянуть. Как раз рабочий день — солдат спит служба идёт.

Ты, небось, массированно использовал статический метод класса Thread? Кажется, на "s" начинается...
... << RSDN@Home 1.1 beta 1 >>
Re[9]: Массивы в C#
От: mihailik Украина  
Дата: 26.08.03 12:59
Оценка:
G>Но jagged массивы не соответствуют CLS

Ты точно помнишь? Не многомерные ли массивы ты имел ввиду?
... << RSDN@Home 1.1 beta 1 >>
Re[16]: Массивы в C#
От: ExtraLamer  
Дата: 26.08.03 13:27
Оценка:
Здравствуйте, WFrag, Вы писали:

WF>Здравствуйте, ExtraLamer, Вы писали:


EL>>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.


WF>Во-первых, добрался. Как ты сам заметил — это mono.

WF>А во-вторых, Ximian-а купил не SUN, а Novell (читать тут). И mono сворачивать они не собираются, а наоборот, обещают развивать.

Да ошибся, прочитал это на сайте http://www.knoppix.ru

Цитата: "Sun Microsystems связана с Linux самым прямым образом — едва ли месяц назад приобретя компанию Ximian (ту самую, что работает над проектом Mono — варианта платформы .Net для Linux), в сентябре она грозитсявыпустить на массовый рынок собственный пакет десктоп-приложений для свободной ОС под названием Mad Hutter." Этож надо так новость перетря(а)хнуть ...

У Novell — денег мало ... уж лучше бы и вправду Sun купила А лучше всего — IBM!
Надо сказать, что после покупки Novell, snapshot'ы перестали выкладывать (последний от 16 августа) ... а раньше каждый день выкладывали — может это и есть конец Mono?(
Re[16]: Массивы в C#
От: ExtraLamer  
Дата: 26.08.03 13:28
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, ExtraLamer, Вы писали:


EL>>К сожалению отличается — VB7 делали, как известно с расчётом под MSIL, тут переменные variant — не пройдут. Так что когда стал выбор у любителей VB — между VB7 и С# то многие, перешли на C#. Так как VB7 и С# — различаются только синтаксисом, а так — одно и то же. Кто му же многим понравилось что в C# отсутствуют (точнее: они там есть но обходится без них попроще, чем обходится без них на С++) указатели(Все VB программисты — вздрогнули ).


ВВ>Отличается не только синтаксисом. В VB7 многое оставили не то чтобы для совместимости не то чтобы с VB6, а скорее с программистами на VB6 . Тут тебе и модули и прочая фигня. К тому же во многих случаях в VB7 осуществляется автоматическое обратное приведение к типу, что может весьма серьезно повлиять на дизайн всего приложения. Там и шаблоны-то по большому счету не так уж нужны.


EL>>>>А вот с С# на С++ — не очень.


VD>>>А. Ну, ты вот это раскажи тем кто переходит.


EL>>>>Да и не хочется(почему то) ...


VD>>>Кому как. А вот мне что-то на плюсах все меньше и меньше хочется писать. Еще бы шаблоны и так по мелочи, и про плюсы можно бы было начать забывать. Хотя конечно каждому свое...


EL>>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.


Вообщето не SUN. а Novell — я ошибся — про ошибку читать здесь. -> http://www.rsdn.ru/Forum/Message.aspx?mid=365090&amp;only=1
Автор: ExtraLamer
Дата: 26.08.03


ВВ>Вообще добрался, а вот приживется ли... А оно тебе нужно?


Нужно! Прям каждый день мечтаю писать прогруммы С#.Net под *BSD.
Re[16]: Массивы в C#
От: ExtraLamer  
Дата: 26.08.03 13:28
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, ExtraLamer, Вы писали:


EL>>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN.


AVK>Блин, как в анекдоте. Во-первых не Sun, а Novell, во-вторых разработку mono собираются не закрывать а наоборот финансировать.


Ну хватит издеваться , меня уже поправили. Про ошибку читать здесь. -> http://www.rsdn.ru/Forum/Message.aspx?mid=365090&amp;only=1
Автор: ExtraLamer
Дата: 26.08.03
Re[9]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 13:40
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Действительно появились? Вот чёрт, а я и не знал. Как называется?


TStringHash по моему
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[17]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 13:40
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Ну хватит издеваться , меня уже поправили.


Извини, использование януса приводит к определенным особенностям. На момент описания то что тебя поправили я не видел.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[9]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 13:41
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Действительно появились? Вот чёрт, а я и не знал. Как называется?


Да. Только у орлов из Борланда очень бурная фантазия и они назвали их как-то странно. Сейчас уже не помню как. Что-то связанное с бакетами, если не ошибаюсь.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 13:41
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Насколько я слышал, хеш-таблицы именно в Perl особенно прижились.


Там они просто встренные. А вообще, хэш-таблицы есть для любого языка.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 13:52
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>К сожалению отличается — VB7 делали, как известно с расчётом под MSIL,


Что характерно, Шарпм тоже.

EL> тут переменные variant — не пройдут.


Тут пройдут Objects, что намного гибче чем Variant.

EL> Так что когда стал выбор у любителей VB — между VB7 и С# то многие, перешли на C#.


Вот и непотна логика. Если ты уже знаешь ВБ, а разницы между Шарпом и ВБ нет, то зачем переходить то?

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

EL> Так как VB7 и С# — различаются только синтаксисом, а так — одно и то же.


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

EL> Кто му же многим понравилось что в C# отсутствуют (точнее: они там есть но обходится без них попроще, чем обходится без них на С++) указатели(Все VB программисты — вздрогнули ).


А что в ВБ7 их встроили? Или это снова антилогические рассцждения?

EL>Да просто до Linux и прочих *nix, С# ещё не добрался, а там только плюсы и есть. Возможно и не доберётся, в свете покупки Ximian — SUN. SUN наверно всё сделает что бы на *nix — была только Java , а Mono прикроют по тихоньку.


Я не знаю кто прикрывает Моно. Судя по резальтатам он развивается и очень успешно. Моно — это опен-сорсный проект и прекрыть его не так то просто.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 13:52
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Нужно! Прям каждый день мечтаю писать прогруммы С#.Net под *BSD.


И в чем проблемы? Про SSCLI слышал?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 13:52
Оценка:
Здравствуйте, Воронков Василий, Вы писали:
ВВ>
ВВ>        Dim OInst As New Object
ВВ>        OInst = AInst

ВВ>        OInst.MyFuckingMethod() 'Sic!
ВВ>


Это называется по другому. Это называется поздинм связыванием. В отличии от шаблонов приводит к тормозам и ошибкам времени компиляции. Нужно в основном для скриптов.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.08.03 14:03
Оценка:
Hello, mihailik!
You wrote on Tue, 26 Aug 2003 12:59:46 GMT:

хъ
Умничать будешь в другом месте.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[19]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.08.03 14:08
Оценка:
Hello, AndrewVK!
You wrote on Tue, 26 Aug 2003 09:12:06 GMT:

AS>> Еще не скоро дотнет будет у каждого юзера на машине, это раз.


A> При теперешних размерах дистрибутивов не особо страшно. Да и будет он

A> достаточно скоро, как начнут дозревать первые коробочные продукты на
A> нем.

Хм. Когда это скоро?

AS>> Два — производительность. Я как-то писал програмульку, которая

AS>> заливает содержимое файловой системы (без собственно данных, просто
AS>> атрибуты) в БД. Это было нечто! Programm files заливался часов 5-6!

A> И при чем тут дотнет? У тебя на работу с БД и диском и уходит основное

время,
A> а управляемый код скорее всего занимает десятые доли процента.

Да. Ты проверял?
Первые пол часа у меня все заливалось на ура. Десятки файлов в сек. К концу
в среднем было 1 файл на несколько секунд.
Периодически все застывало на несколько секунд (до полу минуты) и потом
скорость увеличивалась. Это ясно что.

З.Ы. Я думаю, что проблемы была в рекурсивном вызове процедуры закачки для
каталогов. Видимо, используемые ресурсы из-за этого не освобождались.
Кстати, памятухи прога жрала не много и процессор не тормозила. Базенка
загружена абсолютно не была.
Кстати, програмулина-то не сложная. Попробуй сам, если не веришь.

З.Ы.Ы. OLTP сервера я на нем точно писать не буду.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[18]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 26.08.03 14:11
Оценка:
Hello, Воронков!
You wrote on Tue, 26 Aug 2003 11:39:42 GMT:

хъ
Option Strict On


With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[19]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 14:17
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Hello, Воронков!

AS>You wrote on Tue, 26 Aug 2003 11:39:42 GMT:

AS>хъ

AS>Option Strict On


Ну и что? Суть-то от этого меняется. Сам факт, что так можно писать уже примечателен.
... << RSDN@Home 1.1 beta 1 >>
Re[19]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 14:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:

ВВ>>
ВВ>>        Dim OInst As New Object
ВВ>>        OInst = AInst

ВВ>>        OInst.MyFuckingMethod() 'Sic!
ВВ>>


VD>Это называется по другому. Это называется поздинм связыванием. В отличии от шаблонов приводит к тормозам и ошибкам времени компиляции. Нужно в основном для скриптов.


Да я не спорю, только вот значит ли это, что ничто не будет этим пользоваться? В вб6 — это была стандартная практика. И вполне может серьезно повлиять на дизайн приложения — разве нет?
... << RSDN@Home 1.1 beta 1 >>
Re[17]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Не знаю, что-то последнее время я начинаю сомневаться в том, что дотнет будет господствовать "на столе". В вебе — это да. А вот для настольных приложений. Уже ведь "второе поколение", так сказать, близится к концу, а что из настольного было на дотнете написано? Даже МС как-то не торопится. Как бы не разделил он в этом плане участь джавы...


А ты на подпись под своим и моим сообщением посмотри. Потом посмотри на то что в качестве макросов в стидии используется. Потом глять на 2003-ий офис. Виндовс тоже долго приживалась... ничего прижелась. Помнишь сколько таких же сомнений было по поводу виндовс?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Еще не скоро дотнет будет у каждого юзера на машине, это раз.

AS>Два — производительность. Я как-то писал програмульку, которая заливает
AS>содержимое файловой системы (без собственно данных, просто атрибуты) в БД.
AS>Это было нечто! Programm files заливался часов 5-6!
AS>WTL для лекгих клиентов рулит!

Ну, это как писать. Я вот тут написал парсер шарпа. Так он за пару секунд весь янус прочитывает, а это более сони файлов. Да что там Янус... он весь Моно сканирует за несколько секунд, а это несколько тысяч файло. И при это я даже не извращался с конвертацией всего в массив символов, все на обычных строках.

Ты вот тот же код на WTL пробовал писать? И как он был намного быстрее? Может дело в объемах, или в том что общение с БД через SQL — это не самое быстрое занятие?

PS

В общем, нужно завязывать это разговор, а то он скоро в очередной "vs." первратится.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Честно говоря, я-то как раз думаю, что с производительностью у дотнета вполне нормально. Тут у меня нареканий даже нет. Вспомни, какое было раньше одно из самых популярных средств разработки — VB6. А у него как с производительностью? С до-диезом даже сравивать смешно.

ВВ>К тому же мощность компов имеет склонность удваиваться каждые 18 месяцев.

Полностью солидарен. Конечно если ускорят, то мы не откажемся, но и сейчас нормально. Особенно по сравнению со скоростью разработки.

ВВ>Тут скорее об отношении речь. Меня вот действительно беспокоит тот факт, что настольные плаги на дотнете что-то не особенно торопятся писать — я имею в виду проги широкого масштаба, разумеется.


Лиха беда начало... Следующая версия ОС от МС будет содержать в себе дотнет. По слухам она даже частично будет на нем написана со всеми вытекающими... Пройдет еще год-другой и дотнетным рантаймом будет завалены все машины. Тут главное, чтобы программистам это нужн было.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>И при чем тут дотнет? У тебя на работу с БД и диском и уходит основное время, а управляемый код скорее всего занимает десятые доли процента.


Не, ну, можно же и хмл парсить часами, если с пристрастием...
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, mihailik, Вы писали:


M>>Действительно появились? Вот чёрт, а я и не знал. Как называется?


AVK>TStringHash по моему


Нет. Это фигня. Да и назывался он по другому.

Задолбали... ну, почему именно я должен в хэлп лазить?

... В общем, нашел... TBucketList называется. Почему так? Дык я же говорю делали орлы! Но не те что гордо парять в горах, а лесные, что дерево ключам долбят.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, WFrag, Вы писали:

WF>Во-первых, добрался. Как ты сам заметил — это mono.

WF>А во-вторых, Ximian-а купил не SUN, а Novell (читать тут). И mono сворачивать они не собираются, а наоборот, обещают развивать.

Вот это то и опастно. В последнее время за Новолом закрепилась устойчивая репутация похоронной контры. Все продукты попадающие к ним исчезают. Кроме них еще есть два похоронщика CA и Семантик.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>У Novell — денег мало ... уж лучше бы и вправду Sun купила А лучше всего — IBM!


Сан? Да они любой продукт связанный с дотнетом сразу похоронят. А уж Моно уничтожат так что и следа не останется. А IBM... да они и сами за пару месяцев могут нечто подобное слабать.

EL>Надо сказать, что после покупки Novell, snapshot'ы перестали выкладывать (последний от 16 августа) ... а раньше каждый день выкладывали — может это и есть конец Mono?(


Будет жаль. Комерческий дотнет уже есть. А комерческий дотнет на линуксе мне и на фиг не упал.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 14:20
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>спасибо за ответ. Такая форма записи массива хоть и более понятна, но менее гибка,


Чем же это?

EL> инициализировать всё же лучше будет в конструкторе


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

VD>>Кстати, инициализация реально идет в рантайме. Жертвы крутому рантайму.


EL>В каком смысле?


В прямом. См. выше.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 14:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Не знаю, что-то последнее время я начинаю сомневаться в том, что дотнет будет господствовать "на столе". В вебе — это да. А вот для настольных приложений. Уже ведь "второе поколение", так сказать, близится к концу, а что из настольного было на дотнете написано? Даже МС как-то не торопится. Как бы не разделил он в этом плане участь джавы...


VD>А ты на подпись под своим и моим сообщением посмотри. Потом посмотри на то что в качестве макросов в стидии используется. Потом глять на 2003-ий офис. Виндовс тоже долго приживалась... ничего прижелась. Помнишь сколько таких же сомнений было по поводу виндовс?


Ну хоум-то все-таки проект "в пределах сообщества". А 2003 офис — разве под дотнет Или ты имеешь в виду, что он как и студия — т.е. managed код там тоже присутствует?
Просто хотелось бы посмотреть на действительно крупные успешные коммерческие проекты под дотнет. А вот нету их пока
... << RSDN@Home 1.1 beta 1 >>
Re[17]: Массивы в C#
От: WFrag США  
Дата: 26.08.03 14:42
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>У Novell — денег мало ... уж лучше бы и вправду Sun купила А лучше всего — IBM!


Да не, нормально. Хорошая фирма. А вот с маркетингом у них как-то хреново.
Re[20]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 15:10
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Хм. Когда это скоро?


Надеюсь в ближайший год-два.


A>> а управляемый код скорее всего занимает десятые доли процента.


AS>Да. Ты проверял?


А тут и проверять нечего, все что ты описал не имеет отношения к самому коду. Так что либо ты лукавишь и чего то недоговариваешь, либо от дотнета тут ничего не зависит.

AS>Первые пол часа у меня все заливалось на ура. Десятки файлов в сек. К концу

AS>в среднем было 1 файл на несколько секунд.
AS>Периодически все застывало на несколько секунд (до полу минуты) и потом
AS>скорость увеличивалась. Это ясно что.

Понятия не имею, я твой код не видел. Опиши задачку подробнее, сделаю тебе программку которая зависать и останавливаться не будет.

AS>Кстати, програмулина-то не сложная. Попробуй сам, если не веришь.


Давай. Время будет попробую. Мож действительно баг где.

AS>З.Ы.Ы. OLTP сервера я на нем точно писать не буду.


Хозяин барин. Но на джаве вот пишут.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[11]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 15:20
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>TStringHash по моему


VD>Нет. Это фигня.


В смысле фигня? Нормальная хеш-таблица со строковым ключем. Я исходники смотрел, никаких косяков не видел.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[19]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.08.03 15:20
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну хоум-то все-таки проект "в пределах сообщества".


А что это меняет?

ВВ>А 2003 офис — разве под дотнет


Нет, но писать для него макросы на дотнете уже можно.

ВВ>Просто хотелось бы посмотреть на действительно крупные успешные коммерческие проекты под дотнет.

ВВ> А вот нету их пока

А крупные проекты за год не написать.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re: Массивы в C# - наблюдение
От: Рек Россия  
Дата: 26.08.03 15:32
Оценка:
Здравствуйте, ivan23i, Вы писали:

I>Как здесь быть, потому что если мы создаем массив то уже

I>срзу задаем ему тип, или выхода нет?

Кстати про массивы...
Поглядел я тут на днях рефлекшеном на массив, и просто офигел от неожиданности.

Вижу — в массиве есть методы, которые возвращают мои собственные типы.
Не object'ы, а именно мои собственные типы !
MyType[] arr;

После этого arr имеет методы:
MyType Get(int);
MyType GetAt(int);
...
void Set(int, MyType);
void SetAt(int, MyType);
...

Т.е. массивы-то в .Net УЖЕ сейчас шаблонные !

Просто класс System.Array — это пока единственный шаблонный тип в .Net (и применяется он со спец. синтаксисом).
Редмонтчанам осталось только немного обобщить данную технологию. Делов то — чуть!...
Re[20]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 15:43
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>Ну хоум-то все-таки проект "в пределах сообщества".

AVK>А что это меняет?

Просто его видно только внутри РСДН, а за пределами — ни зги. По большому счету вся пурга по поводу того, что дотнет отстой и происходит из-за того, что не показал он себя пока как успешное средство на десктопе.

ВВ>>Просто хотелось бы посмотреть на действительно крупные успешные коммерческие проекты под дотнет.

ВВ>> А вот нету их пока
AVK>А крупные проекты за год не написать.

Ну в общем прошло уже несколько больше года. Да и ладно уж "крупные". Хотя бы один пример коммерческого проекта под дотнет "широкого" масштаба.
... << RSDN@Home 1.1 beta 1 >>
Re[20]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 15:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Да я не спорю, только вот значит ли это, что ничто не будет этим пользоваться? В вб6 — это была стандартная практика. И вполне может серьезно повлиять на дизайн приложения — разве нет?


Это зависит от квалификации. Если человек (компания) опытные, то врядли он(и) будет делать дизайн приложения на позднем связывании. Лично я много писал на ВБ6, но использовал эту возможность очень редко. За все время раза 2-3 из которых только один раз для полиморфизма. В остальных случаях по шустрому нужно было сделать атомэйшон и было влом для такой мелочи подключать тлб-ху.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 15:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну хоум-то все-таки проект "в пределах сообщества".


И тем не менее продукт.

ВВ> А 2003 офис — разве под дотнет Или ты имеешь в виду, что он как и студия — т.е. managed код там тоже присутствует?


Скорее как в студии, но более новая версия. Но тем не менее, везде где будет офис 2003, везде будет дотнет. Думаю, что со временем они и другие части ворда с экселем переведут на дотнет. Энжины (редактор и таблица) скорее всего так и останутся анменеджед (кода слишком много), а вот интерфейс очень даже может быть переписан. Сейчас интерфейс в ворде с экселем создан на базе ActiveX-ов. Все диалоги — это ActiveX-контейнеры, а все кнопки — ActiveX-контролв. Явно что с переходом на дотнет в качестве скриптов это положение нужно будет менять. Да и ВинФормсы намного более качественны чем формы из ворда.

ВВ>Просто хотелось бы посмотреть на действительно крупные успешные коммерческие проекты под дотнет. А вот нету их пока


А что они должны быть обязательно на 100% менэджед? Если нет, то такие продукты уже на подходе. МС пихает дотнет во все новые версии. Опять же по слухам, но тем не менее, следующая версия ОС будет содержать существенный процент менеджед кода, чуть ли не весь эксплорер будет переписан на Шарпе... В mssql будут встроены менеджед-тригеры.

А вообще, новые продукты большого размера требуют большого времени на свою разработку. Многие выжидают. Во общем, все как с виндами во времен ДОС-а и с 95-ыми во времена 3.1-ых.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 15:59
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

A>> И при чем тут дотнет? У тебя на работу с БД и диском и уходит основное

AS>время,
A>> а управляемый код скорее всего занимает десятые доли процента.

AS>Да. Ты проверял?


Я проверял. Не твой код конечно, но все же. При общении с БД скорость кода уже не так важна. Именно по этому неблыо никаких проблем в создании клиентов для БД на ВБ. А ведь ВБ6 был дико тормозным. Дотнету до него ой как долеко (это тоже проверял).

AS>Первые пол часа у меня все заливалось на ура. Десятки файлов в сек. К концу

AS>в среднем было 1 файл на несколько секунд.

Так может, у тебя что-то с алгоритмом было нета? Или ты где-то память удерживал?

AS>Периодически все застывало на несколько секунд (до полу минуты) и потом

AS>скорость увеличивалась. Это ясно что.

И что?

Я вот раз в два месяца генерирую chm для диска. Как раз на дотнетной программе. Первая версия вела себя очень похоже на описанный тобой случай. Потом ИТ поправил ее... Там регэкспы были которые каждый раз заново создавались, а в дотнете в ргэкспах ошибка. В общем, он сделал все регэкспы глобальными и прекомпилированными и программа залетала. Я потом туда еще пару тон регэкспов добавил и все очень даже шустро пашет.

Про парсер я тоже вроде гооврил. Так что ищи проблему в коде, а не в компиляторе/рантайме.

AS>З.Ы. Я думаю, что проблемы была в рекурсивном вызове процедуры закачки для

AS>каталогов. Видимо, используемые ресурсы из-за этого не освобождались.

Дык, а зачем же ты их держал? Вызывай из этой рекурсивной процедуры другоую рабочую и делай в ней все что тебе нужно. Память будет освобждаться автоматически. А так... Если ты на С++ начнешь в рекусрсивной процедуре память пачками занимть, то она тоже будет торомозить.

AS>Кстати, памятухи прога жрала не много и процессор не тормозила. Базенка

AS>загружена абсолютно не была.
AS>Кстати, програмулина-то не сложная. Попробуй сам, если не веришь.

Ну, ты ее код нам покажи, а мы глянем, что не так...

AS>З.Ы.Ы. OLTP сервера я на нем точно писать не буду.


Правильно пиши на плюсах. А то что за работа конторы без периодических AV.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Массивы в C#
От: gbush  
Дата: 26.08.03 17:02
Оценка: 3 (1)
Здравствуйте, mihailik, Вы писали:

G>>Но jagged массивы не соответствуют CLS


M>Ты точно помнишь? Не многомерные ли массивы ты имел ввиду?


вложенные


A jagged array is an array whose elements are arrays. The elements of a jagged array can be of different dimensions and sizes. A jagged array is sometimes called an "array-of-arrays."


Note that jagged arrays are not compliant with the common language specification (CLS). This means you should not expose jagged arrays from any class you want CLS-compliant code to consume. For more information, see Arrays.


from МСДН
Все хорошо кончается, что кончается ещё лучше...
Re[20]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 17:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

ЗЫ. А что значит можно под новый офис макросы на дотнете писать? Т.е. компилируемые макросы? Где об этом можно прочитать?
... << RSDN@Home 1.1 beta 1 >>
Re[21]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 19:38
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>ЗЫ. А что значит можно под новый офис макросы на дотнете писать? Т.е. компилируемые макросы? Где об этом можно прочитать?


VSA называется. Почитать естественно в МСДН на МС. А вообще на них и посмотреть можно. В студии именно они, только версией помладше.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 19:38
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну в общем прошло уже несколько больше года. Да и ладно уж "крупные". Хотя бы один пример коммерческого проекта под дотнет "широкого" масштаба.


Тот же АВК работает в одной из довольно известных Московских контор и делают они сейчас пилотный проект на дотнете. Естественно, что сервеная сторона там преобладает, но и десктоп вроде тоже на дотнете пишут.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 19:38
Оценка:
Здравствуйте, gbush, Вы писали:

G>

G>Note that jagged arrays are not compliant with the common language specification (CLS). This means you should not expose jagged arrays from any class you want CLS-compliant code to consume. For more information, see Arrays.


G>from МСДН


Здорово. А вот описание массивов из стандарта Шарпа принятого екмой как часть стандарта дотнета:

19.1 Array types
An array type is written as a non-array-type followed by one or more rank-specifiers:

array-type:
  non-array-type   rank-specifiers
non-array-type:
  type
rank-specifiers:
  rank-specifier
  rank-specifiers   rank-specifier
rank-specifier:
  [   dim-separatorsopt   ]
dim-separators:
  ,
  dim-separators   ,

A non-array-type is any type that is not itself an array-type.
The rank of an array type is given by the leftmost rank-specifier in the array-type: A rank-specifier indicates that the array is an array with a rank of one plus the number of "," tokens in the rank-specifier.
The element type of an array type is the type that results from deleting the leftmost rank-specifier:
" An array type of the form T[R] is an array with rank R and a non-array element type T.
" An array type of the form T[R][R1]…[RN] is an array with rank R and an element type T[R1]…[RN].
In effect, the rank-specifiers are read from left to right before the final non-array element type. [Example: The type int[][,,][,] is a single-dimensional array of three-dimensional arrays of two-dimensional arrays of int. end example]
At run-time, a value of an array type can be null or a reference to an instance of that array type.


Ведь получается, что тогда часть спецификации не совместима с ней же.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Массивы в C#
От: ExtraLamer  
Дата: 26.08.03 19:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>спасибо за ответ. Такая форма записи массива хоть и более понятна, но менее гибка,


VD>Чем же это?


Ну вот внизу вы и говорите про конструктор — вот тем. Я сугубо про форму записи. На деле — одно и то же.

EL>> инициализировать всё же лучше будет в конструкторе


VD>И в чем проблема? Я же тебе сказал, что реально инициализация идет в рантайме. Ты можешь с тем же успхам перенести эту инициализацию в конструктор и даже использовать переменные в для задания размеров массивов.


А я что не вконструкторе там инициализировал?
Re[22]: Массивы в C#
От: Воронков Василий Россия  
Дата: 26.08.03 20:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Воронков Василий, Вы писали:


ВВ>>ЗЫ. А что значит можно под новый офис макросы на дотнете писать? Т.е. компилируемые макросы? Где об этом можно прочитать?


VD>VSA называется. Почитать естественно в МСДН на МС. А вообще на них и посмотреть можно. В студии именно они, только версией помладше.


Понятно. Я несколько неправильно понял.
... << RSDN@Home 1.1 beta 1 >>
Re[13]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.08.03 20:04
Оценка:
Здравствуйте, ExtraLamer, Вы писали:

EL>Ну вот внизу вы и говорите про конструктор — вот тем. Я сугубо про форму записи. На деле — одно и то же.


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

EL>А я что не вконструкторе там инициализировал?


Я имел в виду, что можно перенести инициализацию (именно декларативную) в конструктор и ничего не изменится.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Массивы в C#
От: ExtraLamer  
Дата: 26.08.03 21:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, ExtraLamer, Вы писали:


EL>>Ну вот внизу вы и говорите про конструктор — вот тем. Я сугубо про форму записи. На деле — одно и то же.


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


Про быстрее — не знаю. Миллисикунды — считать наверно смысла нет. Если уж совсем будет медленно — можно повесить пользователю splash — "Loading ... please wait" .
Что же до удобства — то я думаю вы согласитесь — что это сугубо "дело вкуса".

EL>>А я что не вконструкторе там инициализировал?


VD>Я имел в виду, что можно перенести инициализацию (именно декларативную) в конструктор и ничего не изменится.


Ну я и говори — что не чего не изменится. На деле — одно и то же.
Re[21]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.08.03 06:00
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>>>Ну хоум-то все-таки проект "в пределах сообщества".

AVK>>А что это меняет?

ВВ>Просто его видно только внутри РСДН, а за пределами — ни зги.


Что это меняет?

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


И не покажет так быстро, средства разработки за год не меняются. Сколько времени прошло с выхода первых виндов, прежде чем под нее стали появляться серьезные пакеты?

ВВ>Ну в общем прошло уже несколько больше года.


Это слишком мало. Год нужно только чтобы рискнуть начать что то крупное на нем разрабатывать.

ВВ>Да и ладно уж "крупные". Хотя бы один пример коммерческого проекта под дотнет "широкого" масштаба.


Библиотеки компонент вроде инфраджистика это крупный проект? А вобще
http://www.microsoft.com/net/casestudies/
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[20]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 27.08.03 06:28
Оценка:
Hello, Воронков!
You wrote on Tue, 26 Aug 2003 14:17:33 GMT:

хъ
Примечателен и не более того.
Я всегда выставляю on на уровне проекта и проблем не знаю.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[21]: Массивы в C#
От: Воронков Василий Россия  
Дата: 27.08.03 07:13
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Hello, Воронков!

AS>You wrote on Tue, 26 Aug 2003 14:17:33 GMT:

AS>хъ

AS>Примечателен и не более того.
AS>Я всегда выставляю on на уровне проекта и проблем не знаю.

О чем речь-то вначале шла? О том, что де отличия между вб.нет и диезом — совершенно условны. Я это привел в качестве доказательства обратного, так как на мой взгляд эта фичка довольно важная и считать ее условным отличием нельзя. А можно ведь еще и вспомнить об option explicit, который включен по умолчанию. То есть я собсно не утверждаю, что так нужно писать и что это хорошо.
... << RSDN@Home 1.1 beta 1 >>
Re[22]: Массивы в C#
От: Воронков Василий Россия  
Дата: 27.08.03 07:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Ну в общем все ты правильно говоришь, конечно. Я собсно лишь о том, что если б офис 2003 имел бы приставку .НЕТ, то скептиков бы заметно поубавилось.
... << RSDN@Home 1.1 beta 1 >>
Re[21]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 28.08.03 04:19
Оценка:
Hello, VladD2!
You wrote on Tue, 26 Aug 2003 15:59:39 GMT:

[]

V> Я проверял. Не твой код конечно, но все же. При общении с БД скорость

V> кода уже не так важна.

Я бы не стал так говорить.

V> Именно по этому неблыо никаких проблем в создании клиентов для БД на ВБ.

V> А ведь ВБ6 был дико тормозным. Дотнету до него ой как долеко (это тоже
V> проверял).

Про vb6 никто ничего не говорил.

хъ

V> Так может, у тебя что-то с алгоритмом было нета? Или ты где-то память

V> удерживал?

А как можно память удерживать?

хъ

AS>> З.Ы. Я думаю, что проблемы была в рекурсивном вызове процедуры закачки

AS>> для каталогов. Видимо, используемые ресурсы из-за этого не
AS>> освобождались.

V> Дык, а зачем же ты их держал? Вызывай из этой рекурсивной процедуры

V> другоую рабочую и делай в ней все что тебе нужно. Память будет
V> освобждаться автоматически. А так... Если ты на С++ начнешь в
V> рекусрсивной процедуре память пачками занимть, то она тоже будет
V> торомозить.

Ничего тормозить не будет. К тому же, память програмулиной вообще,
практически, не жралась.

хъ

V> Ну, ты ее код нам покажи, а мы глянем, что не так...


Ок. Вот код. Только он очень старый (еще зимой писанный), так что прошу
особо к стилю не привязываться.

    Class CApp
        Public path As String
        Public recursive As Boolean

        Private tabs As String
        Private conn As New SqlConnection("Data Source=machine;User
id=user;password=password")

        Sub New(ByVal path As String, ByVal r As Boolean)
            If Directory.Exists(path) Then
                MyClass.path = path
                recursive = r
                conn.Open()
            Else
                Throw New DirectoryNotFoundException()
            End If
        End Sub

        Public Sub Process()
            Process(path)
        End Sub

        Private Sub Process(ByVal path As String)
            Dim cmd As New SqlCommand()
            Dim b As Boolean
            Dim oldtabs As String
            With cmd
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                With .Parameters(0)
                    .ParameterName = "@return_value"
                    .SqlDbType = SqlDbType.Int
                    .Direction = ParameterDirection.ReturnValue
                End With
                With .Parameters(1)
                    .ParameterName = "@name"
                    .SqlDbType = SqlDbType.NVarChar
                    .Size = 1000
                    .Direction = ParameterDirection.Input
                End With
                With .Parameters(2)
                    .ParameterName = "@sd"
                    .SqlDbType = SqlDbType.Text
                    .Direction = ParameterDirection.Input
                End With
                With .Parameters(3)
                    .ParameterName = "@parent"
                    .SqlDbType = SqlDbType.Int
                    .Direction = ParameterDirection.Input
                End With
                .Parameters(1).Value = path
                .Parameters(2).Value = ""
                .Parameters(3).Value = 0
                .CommandText = "CreateFolder"
                .CommandType = CommandType.StoredProcedure
                .Connection = conn
                Try
                    .ExecuteNonQuery()
                Catch e As SqlException
                    b = True
                    Console.WriteLine(tabs & path & vbTab & " - error
message: " & e.Message)
                End Try
            End With
            If Not b Then
                Dim s As String
                Dim retval As Integer =
Convert.ToInt32(cmd.Parameters(0).Value)
                If retval > 0 Then
                    s = tabs & path & vbTab & " - inserts under " &
retval.ToString()
                Else
                    s = tabs & path & vbTab & " - error code " &
retval.ToString()
                End If
                Console.WriteLine(s)
                If retval > 0 Then
                    Dim di As New DirectoryInfo(path)
                    Dim fi As FileInfo
                    Dim dir As DirectoryInfo
                    UpdateFileInfo(di, retval)
                    tabs += "  "
                    Dim FolderId As Integer = retval
                    cmd.Parameters.Add(cmd.CreateParameter())

                    For Each fi In di.GetFiles()
                        cmd.Parameters(1).Value = fi.FullName
                        cmd.Parameters(2).Value = ""
                        cmd.Parameters(3).Value = FolderId
                        With cmd.Parameters(4)
                            .SqlDbType = SqlDbType.Int
                            .Direction = ParameterDirection.Input
                            .ParameterName = "@aid"
                            .Value = UpdateFileAttributes(fi.Attributes,
fi.Name)
                        End With
                        cmd.CommandText = "CreateFile"
                        Try
                            cmd.ExecuteNonQuery()
                        Catch e As SqlException
                            b = True
                            Console.WriteLine(tabs & fi.Name & vbTab & " -
error message: " & e.Message)
                        End Try
                        If Not b Then
                            retval =
Convert.ToInt32(cmd.Parameters(0).Value)
                            If retval > 0 Then
                                s = tabs & fi.Name & vbTab & " - inserts
under " & retval.ToString()
                            Else
                                s = tabs & fi.Name & vbTab & " - error code
" & retval.ToString()
                            End If
                            Console.WriteLine(s)
                            If retval > 0 Then
                                Dim cmd1 As New SqlCommand()
                                UpdateFileInfo(fi, retval)
                                With cmd1
                                    .Parameters.Add(.CreateParameter())
                                    .Parameters.Add(.CreateParameter())
                                    With .Parameters(0)
                                        .SqlDbType = SqlDbType.BigInt
                                        .Direction =
ParameterDirection.Input
                                        .ParameterName = "@fs"
                                        .Value = fi.Length
                                    End With
                                    With .Parameters(1)
                                        .SqlDbType = SqlDbType.Int
                                        .Direction =
ParameterDirection.Input
                                        .ParameterName = "@id"
                                        .Value = retval
                                    End With
                                    .CommandText = "update RealFile set
FileSize=" & _
                                        "@fs where id = @id"
                                    .Connection = conn
                                    .CommandType = CommandType.Text
                                    Try
                                        .ExecuteNonQuery()
                                    Catch e As SqlException
                                        Console.WriteLine(tabs & fi.Name &
vbTab & " - error message: " & e.Message)
                                    End Try
                                End With
                            End If
                        End If
                    Next
                    For Each dir In di.GetDirectories()
                        oldtabs = tabs
                        Process(dir.FullName) ' вот он! - рекурсивный вызов
                        tabs = oldtabs
                    Next
                End If
            End If
        End Sub

        Private Sub UpdateFileInfo(ByVal fsi As FileSystemInfo, ByVal id As
Integer)
            Dim cmd As New SqlCommand()
            With cmd
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                With .Parameters(0)
                    .SqlDbType = SqlDbType.DateTime
                    .Direction = ParameterDirection.Input
                    .ParameterName = "@c"
                    .Value = fsi.CreationTime
                End With
                With .Parameters(1)
                    .SqlDbType = SqlDbType.DateTime
                    .Direction = ParameterDirection.Input
                    .ParameterName = "@a"
                    .Value = fsi.LastAccessTime
                End With
                With .Parameters(2)
                    .SqlDbType = SqlDbType.DateTime
                    .Direction = ParameterDirection.Input
                    .ParameterName = "@w"
                    .Value = fsi.LastWriteTime
                End With
                With .Parameters(3)
                    .SqlDbType = SqlDbType.Int
                    .Direction = ParameterDirection.Input
                    .ParameterName = "@id"
                    .Value = id
                End With
                .CommandText = "update FileBase set " & _
                    "CreationTime = @c," & _
                    "LastAccessTime = @a," & _
                    "LastWriteTime = @w where id = @id"
                .CommandType = CommandType.Text
                .Connection = conn
                Try
                    .ExecuteNonQuery()
                Catch e As SqlException
                    Console.WriteLine(tabs & fsi.Name & vbTab & " - error
message: " & e.Message)
                End Try
            End With
        End Sub

        Private Function UpdateFileAttributes(ByVal fa As FileAttributes,
ByVal fname As String) As Integer
            Dim cmd As New SqlCommand()
            With cmd
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                .Parameters.Add(.CreateParameter())
                With .Parameters(0)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@a"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.Archive)
                End With
                With .Parameters(1)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@c"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.Compressed)
                End With
                With .Parameters(2)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@e"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.Encrypted)
                End With
                With .Parameters(3)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@h"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.Hidden)
                End With
                With .Parameters(4)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@n"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.Normal)
                End With
                With .Parameters(5)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@r"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.ReadOnly)
                End With
                With .Parameters(6)
                    .SqlDbType = SqlDbType.Bit
                    .ParameterName = "@s"
                    .Direction = ParameterDirection.Input
                    .Value = (fa = fa.System)
                End With
                With .Parameters(7)
                    .SqlDbType = SqlDbType.Int
                    .ParameterName = "@id"
                    .Direction = ParameterDirection.Output
                End With
                .CommandText = "AddAttr"
                .CommandType = CommandType.StoredProcedure
                .Connection = conn
                Try
                    .ExecuteNonQuery()
                Catch e As SqlException
                    Console.WriteLine(tabs & fname & vbTab & " - error
message: " & e.Message)
                End Try
            End With
            Return Convert.ToInt32(cmd.Parameters("@id").Value)
        End Function
    End Class


AS>> З.Ы.Ы. OLTP сервера я на нем точно писать не буду.


V> Правильно пиши на плюсах. А то что за работа конторы без периодических

AV

AV ловят криворукие программеры и новички.
У меня, последние AV, с которыми я трахался, были связаны с багами в ATL.
Все!
Писать на плюсах просто надо уметь.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[21]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 28.08.03 04:20
Оценка:
Hello, AndrewVK!
You wrote on Tue, 26 Aug 2003 15:10:39 GMT:

хъ

A> А тут и проверять нечего, все что ты описал не имеет отношения к самому

A> коду. Так что либо ты лукавишь и чего то недоговариваешь, либо от
A> дотнета тут ничего не зависит.

А ты посмотри код (запостил в ответ Владу).

хъ

A> Понятия не имею, я твой код не видел. Опиши задачку подробнее, сделаю

A> тебе программку которая зависать и останавливаться не будет.

Оптимистично!

хъ

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[22]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.08.03 06:00
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

V>> Я проверял. Не твой код конечно, но все же. При общении с БД скорость

V>> кода уже не так важна.

AS>Я бы не стал так говорить.


А зря. Скорость обращения к БД на несколько порядков ниже скорости работы кода. На твоей задачке даже между ассемблером и JScript разницы не будет.

V>> Так может, у тебя что-то с алгоритмом было нета? Или ты где-то память

V>> удерживал?

AS>А как можно память удерживать?


Оставлять ссылки

AS>Ок. Вот код. Только он очень старый (еще зимой писанный), так что прошу

AS>особо к стилю не привязываться.

[skip]

Ну батенька, у нас за такое премии лишают без разговоров. Кто за собой соединения закрывать будет? Бедный MSSQL, это ж ему несколько тысяч соединений одновременно пришлось держать. Как еще у тебя вобще что то работало.
V>> Правильно пиши на плюсах. А то что за работа конторы без периодических
AS>AV

AS>AV ловят криворукие программеры и новички.

AS>У меня, последние AV, с которыми я трахался, были связаны с багами в ATL.
AS>Все!
AS>Писать на плюсах просто надо уметь.

На дотнете тоже.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[23]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 28.08.03 06:27
Оценка:
Hello, AndrewVK!
You wrote on Thu, 28 Aug 2003 06:00:33 GMT:

хъ

A> А зря. Скорость обращения к БД на несколько порядков ниже скорости

A> работы кода. На твоей задачке даже между ассемблером и JScript разницы
A> не будет.

На VBS не проверял, но думаю, что это по быстрее получится.

хъ

A> Оставлять ссылки


Это как?

хъ

A> Ну батенька, у нас за такое премии лишают без разговоров. Кто за собой

A> соединения закрывать будет?

Во-первых, почему во множественном числе?
Во-вторых, зачем его закрывать? Программа завершится, оно и закроется.

A> Бедный MSSQL, это ж ему несколько тысяч соединений одновременно пришлось

A> держать.

С чего ты взял?

A> Как еще у тебя вобще что то работало.


Ты свой код сначала покажи, прежде чем мой работающий хаять.

хъ

> На дотнете тоже.


Истино так!


With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[24]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 28.08.03 12:40
Оценка: 12 (2)
Здравствуйте, Alexey Shirshov, Вы писали:

A>> не будет.


AS>На VBS не проверял, но думаю, что это по быстрее получится.


Ну по сравнению с твоим кодом конечно быстрее.

A>> Оставлять ссылки


AS>Это как?


А вот так. Добавил какой нибудь объект в глобальную коллекцию и забыл его оттуда выкинуть по ненадобности. Или подписался на событие, а по пропаданию надобности забыл отписаться.

A>> Ну батенька, у нас за такое премии лишают без разговоров. Кто за собой

A>> соединения закрывать будет?

AS>Во-первых, почему во множественном числе?


Где множественное число?

A>> Как еще у тебя вобще что то работало.


AS>Ты свой код сначала покажи, прежде чем мой работающий хаять.


Ну хорошо. Несколько комментариев
1) Во первых смысл параметра @sd мне понять не удалось, поскольку он всегда пустая строка. Я его просто выкинул.
2) О содержимом хранимок остается только догадываться, поэтому я выкинул возврат в результате ошибок. Мои хранимки такие:

CREATE PROCEDURE dbo.create_dir 
    @name nvarchar(1000), 
    @parent int, 
    @creation_time datetime, 
    @last_access_time datetime, 
    @last_write_time datetime,
    @return_value int out 
AS
INSERT INTO files(name, parent, is_dir, creation_time, last_access_time, last_write_time) 
    VALUES(@name, @parent, 1, @creation_time, @last_access_time, @last_write_time)
SELECT @return_value = @@IDENTITY


CREATE PROCEDURE dbo.create_file
    @name nvarchar(1000), 
    @parent int, 
    @creation_time datetime, 
    @last_access_time datetime, 
    @last_write_time datetime,
    @attr_archive bit,
    @attr_compressed bit,
    @attr_encrypted bit,
    @attr_hidden bit,
    @attr_readonly bit,
    @attr_system bit,
    @file_size bigint,
    @return_value int out 
AS
INSERT INTO files(name, parent, is_dir, creation_time, last_access_time, last_write_time, 
    attr_archive, attr_compressed, attr_encrypted, attr_hidden, attr_readonly, attr_system, 
    file_size) 
    VALUES(@name, @parent, 0, @creation_time, @last_access_time, @last_write_time,
    @attr_archive, @attr_compressed, @attr_encrypted, @attr_hidden, @attr_readonly, @attr_system,
    @file_size)
SELECT @return_value = @@IDENTITY


3) recursive у тебя нигде не используется, но по смыслу я догадался о чем речь и реализовал
4) Атрибута Normal не существует, это отсутствие атрибутов
5) Перечисление FileAttributes флаговое, просто сравнивать, как это делаешь ты, нельзя, результат при наличии нескольких атрибутов будет неверным.
6) Записывать в одну и ту же строку значения двумя запросами, да еще и с поиском во втором запросе, да еще и в разных транзакциях просто глупо, производительность снизится в несколько раз.

using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;

namespace DotNetTest
{
    public class App
    {
        private const string _conStr = "Integrated Security=SSPI;Initial Catalog=Test";
        private static int _totalProcessed = 0;

        public static void Main(string[] args)
        {
            string path;
            bool recursive;
            try
            {
                path = args[0];
                recursive = bool.Parse(args[1]);
            }
            catch
            {
                throw new ArgumentException("Invalid command line arguments");
            }

            DirectoryInfo dirInfo = new DirectoryInfo(path);
            if (!dirInfo.Exists)
                throw new DirectoryNotFoundException(path);

            Console.WriteLine("Processing directory '{0}' {1}", path, recursive ? "recursive" : "");

            int st = Environment.TickCount;
            ProcessDir(dirInfo, recursive, -1, "");
            st = Environment.TickCount - st;

            Console.WriteLine("Processed {0} files in {1}", _totalProcessed, TimeSpan.FromMilliseconds(st));

            Console.Read();
        }

        private static void ProcessDir(DirectoryInfo dirInfo, bool recursive, int parent, string shift)
        {
            _totalProcessed++;
            int dirId;
            string prefix = shift + dirInfo.FullName + " ";
            using (SqlConnection con = new SqlConnection(_conStr))
            using (SqlCommand cmd = new SqlCommand("create_dir", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@return_value", SqlDbType.Int).Direction = 
                    ParameterDirection.Output;
                cmd.Parameters.Add("@name", SqlDbType.NVarChar, 1000).Value = dirInfo.FullName;
                cmd.Parameters.Add("@parent", SqlDbType.Int).Value = parent;
                AddFileInfo(cmd.Parameters, dirInfo);
                con.Open();
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(prefix + " error: " + ex.Message);
                    return;
                }
                dirId = (int)cmd.Parameters["@return_value"].Value;
                Console.WriteLine(prefix + "insert directory with id = " + dirId);
            }

            foreach (FileInfo fileInfo in dirInfo.GetFiles())
                ProcessFile(fileInfo, dirId, shift + " ");
            
            if (recursive)
                foreach (DirectoryInfo subDirInfo in dirInfo.GetDirectories())
                    ProcessDir(subDirInfo, recursive, dirId, shift + " ");
        }

        private static void ProcessFile(FileInfo fileInfo, int dirId, string shift)
        {
            _totalProcessed++;
            string prefix = shift + fileInfo.FullName + " ";
            using (SqlConnection con = new SqlConnection(_conStr))
            using (SqlCommand cmd = new SqlCommand("create_file", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@return_value", SqlDbType.Int).Direction = 
                    ParameterDirection.Output;
                cmd.Parameters.Add("@name", SqlDbType.NVarChar, 1000).Value = fileInfo.FullName;
                cmd.Parameters.Add("@parent", SqlDbType.Int).Value = dirId;
                AddFileInfo(cmd.Parameters, fileInfo);
                AddFileAttributes(cmd.Parameters, fileInfo);
                cmd.Parameters.Add("@file_size", fileInfo.Length);
                con.Open();
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(prefix + " error: " + ex.Message);
                    return;
                }
                int fileId = (int)cmd.Parameters["@return_value"].Value;
                Console.WriteLine(prefix + "insert file with id = " + fileId);
            }
        }

        private static void AddFileInfo(SqlParameterCollection prms, FileSystemInfo fsi)
        {
            prms.Add("@creation_time", fsi.CreationTime);
            prms.Add("@last_access_time", fsi.LastAccessTime);
            prms.Add("@last_write_time", fsi.LastWriteTime);
        }

        private static void AddFileAttributes(SqlParameterCollection prms, FileSystemInfo fsi)
        {
            prms.Add("@attr_archive", (fsi.Attributes & FileAttributes.Archive) > 0);
            prms.Add("@attr_compressed", (fsi.Attributes & FileAttributes.Compressed) > 0);
            prms.Add("@attr_encrypted", (fsi.Attributes & FileAttributes.Encrypted) > 0);
            prms.Add("@attr_hidden", (fsi.Attributes & FileAttributes.Hidden) > 0);
            prms.Add("@attr_readonly", (fsi.Attributes & FileAttributes.ReadOnly) > 0);
            prms.Add("@attr_system", (fsi.Attributes & FileAttributes.System) > 0);
        }
    }
}


Результат по моему program files на Cel1800 512M и Barracuda ATA 5:
Processed 45328 files in 00:02:20.8430000

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

PS: Читабельность твоего кода преотвратнейшая, еле разобрался.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[25]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 28.08.03 14:41
Оценка:
Hello, AndrewVK!
You wrote on Thu, 28 Aug 2003 12:40:36 GMT:

[]

A>>> Ну батенька, у нас за такое премии лишают без разговоров. Кто за собой

A>>> соединения закрывать будет?

AS>> Во-первых, почему во множественном числе?


A> Где множественное число?


хъ


A> 6) Записывать в одну и ту же строку значения двумя запросами, да еще и с

A> поиском во втором запросе, да еще и в разных транзакциях просто глупо,
A> производительность снизится в несколько раз.

Вот тут не понял.

[код поскипан]

Переписал так. Из изменений только параметры по другому создаются.
    Class CApp
        Public path As String
        Public recursive As Boolean

        Private tabs As String
        Private conn As New SqlConnection("Data Source=dcit01;User
id=fsuser;password=fsuser")

        Private files As Integer = 0

        Sub New(ByVal path As String, ByVal r As Boolean)
            If Directory.Exists(path) Then
                MyClass.path = path
                recursive = r
                conn.Open()
            Else
                Throw New DirectoryNotFoundException()
            End If
        End Sub

        Public Function Process() As Integer
            Return Process(path)
        End Function

        Private Function Process(ByVal path As String) As Integer
            Dim cmd As New SqlCommand()
            Dim b As Boolean
            Dim oldtabs As String
            'prepare to call CreateFolder stored procedure
            With cmd
                .Parameters.Add("@return_value", SqlDbType.Int).Direction =
ParameterDirection.ReturnValue
                .Parameters.Add("@name", SqlDbType.NVarChar, 1000).Value =
path
                .Parameters.Add("@sd", SqlDbType.Text).Value = ""
                .Parameters.Add("@parent", SqlDbType.Int).Value = 0
                .CommandText = "CreateFolder"
                .CommandType = CommandType.StoredProcedure
                .Connection = conn
                Try
                    'calling
                    .ExecuteNonQuery()
                    files += 1
                Catch e As SqlException
                    b = True
                    Console.WriteLine(tabs & path & vbTab & " - error
message: " & e.Message)
                End Try
            End With

            'process the result and go next
            If Not b Then
                Dim s As String
                Dim retval As Integer =
Convert.ToInt32(cmd.Parameters(0).Value)
                If retval > 0 Then
                    s = tabs & path & vbTab & " - inserts under " &
retval.ToString()
                Else
                    s = tabs & path & vbTab & " - error code " &
retval.ToString()
                End If
                'write the result to the console
                Console.WriteLine(s)

                If retval > 0 Then
                    Dim di As New DirectoryInfo(path)
                    Dim fi As FileInfo
                    Dim dir As DirectoryInfo
                    'update directory time attributes
                    UpdateFileInfo(di, retval)

                    tabs += "  "
                    Dim FolderId As Integer = retval
                    cmd.Parameters.Add("@aid", SqlDbType.Int)

                    'fill the files to DB
                    For Each fi In di.GetFiles()
                        With cmd
                            .Parameters("@name").Value = fi.FullName
                            .Parameters("@sd").Value = ""
                            .Parameters("@parent").Value = FolderId
                            .Parameters("@aid").Value = _
                                UpdateFileAttributes(fi.Attributes, fi.Name)
                            .CommandText = "CreateFile"
                            Try
                                .ExecuteNonQuery()
                                files += 1
                            Catch e As SqlException
                                b = True
                                Console.WriteLine(tabs & fi.Name & vbTab &
" - error message: " & e.Message)
                            End Try
                        End With

                        'process the result
                        If Not b Then
                            retval =
Convert.ToInt32(cmd.Parameters(0).Value)
                            If retval > 0 Then
                                s = tabs & fi.Name & vbTab & " - inserts
under " & retval.ToString()
                            Else
                                s = tabs & fi.Name & vbTab & " - error code
" & retval.ToString()
                            End If
                            Console.WriteLine(s)
                            If retval > 0 Then
                                Dim cmd1 As New SqlCommand()
                                UpdateFileInfo(fi, retval)
                                With cmd1
                                    .Parameters.Add("@fs",
SqlDbType.BigInt).Value = fi.Length
                                    .Parameters.Add("@id",
SqlDbType.Int).Value = retval
                                    .CommandText = "update RealFile set
FileSize=" & _
                                        "@fs where id = @id"
                                    .Connection = conn
                                    .CommandType = CommandType.Text
                                    Try
                                        .ExecuteNonQuery()
                                    Catch e As SqlException
                                        Console.WriteLine(tabs & fi.Name &
vbTab & " - error message: " & e.Message)
                                    End Try
                                End With
                                'cmd1.Dispose()
                            End If
                        End If
                    Next
                    'cmd.Dispose()
                    For Each dir In di.GetDirectories()
                        oldtabs = tabs
                        Process(dir.FullName)
                        tabs = oldtabs
                    Next
                End If
            End If
            'cmd.Dispose()
            Return files
        End Function

        Private Sub UpdateFileInfo(ByVal fsi As FileSystemInfo, ByVal id As
Integer)
            Dim cmd As New SqlCommand()
            With cmd
                .Parameters.Add("@c", SqlDbType.DateTime).Value =
fsi.CreationTime
                .Parameters.Add("@a", SqlDbType.DateTime).Value =
fsi.LastAccessTime
                .Parameters.Add("@w", SqlDbType.DateTime).Value =
fsi.LastWriteTime
                .Parameters.Add("@id", SqlDbType.Int).Value = id
                .CommandText = "update FileBase set " & _
                    "CreationTime = @c," & _
                    "LastAccessTime = @a," & _
                    "LastWriteTime = @w where id = @id"
                .CommandType = CommandType.Text
                .Connection = conn
                Try
                    .ExecuteNonQuery()
                Catch e As SqlException
                    Console.WriteLine(tabs & fsi.Name & vbTab & " - error
message: " & e.Message)
                End Try
            End With
            'cmd.Dispose()
        End Sub

        Private Function UpdateFileAttributes(ByVal fa As FileAttributes,
ByVal fname As String) As Integer
            Dim cmd As New SqlCommand()
            With cmd
                .Parameters.Add("@a", SqlDbType.Bit).Value = CBool(fa And
fa.Archive)
                .Parameters.Add("@c", SqlDbType.Bit).Value = CBool(fa And
fa.Compressed)
                .Parameters.Add("@e", SqlDbType.Bit).Value = CBool(fa And
fa.Encrypted)
                .Parameters.Add("@h", SqlDbType.Bit).Value = CBool(fa And
fa.Hidden)
                .Parameters.Add("@n", SqlDbType.Bit).Value = CBool(fa And
fa.Normal)
                .Parameters.Add("@r", SqlDbType.Bit).Value = CBool(fa And
fa.ReadOnly)
                .Parameters.Add("@s", SqlDbType.Bit).Value = CBool(fa And
fa.System)
                .Parameters.Add("@id", SqlDbType.Int).Direction =
ParameterDirection.Output
                .CommandText = "AddAttr"
                .CommandType = CommandType.StoredProcedure
                .Connection = conn
                Try
                    .ExecuteNonQuery()
                Catch e As SqlException
                    Console.WriteLine(tabs & fname & vbTab & " - error
message: " & e.Message)
                End Try
            End With
            UpdateFileAttributes =
Convert.ToInt32(cmd.Parameters("@id").Value)
            'cmd.Dispose()
        End Function
    End Class


Dispose специально закоментировал, так как без него быстрее. Получилось на
папке temp 51 файл в секунду. Что очень не плохо.
Неужели все дело было в дополнительных объектаз-параметрах, которые не
убивались?

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[26]: Массивы в C#
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 28.08.03 15:13
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Переписал так. Из изменений только параметры по другому создаются.


А если еще и команды заготовить заранее, а в цикле только задавать значения параметров?
Re[22]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.03 18:38
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Я бы не стал так говорить.


Не говори.

А я за свои слова отвечаю.

AS>Про vb6 никто ничего не говорил.


Что про него говорить то? Это самое часто используемое средство (в прошлом) для создания морд к БД.

AS>А как можно память удерживать?


Ну, ты сам пример привел. Рекурсия с оставлением ссылок в стеке.

AS>Ничего тормозить не будет.


Еще как будет.

AS>К тому же, память програмулиной вообще,

AS>практически, не жралась.

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

AS>Ок. Вот код. Только он очень старый (еще зимой писанный), так что прошу

AS>особо к стилю не привязываться.

Нда. Много.

AS>AV ловят криворукие программеры и новички.


Т.е. ты никогда не ловил? Или то тоже...

AS>У меня, последние AV, с которыми я трахался, были связаны с багами в ATL.

AS>Все!

Больше небыло? Ай-йа-йа. Ну, это потому что ты свой код не запускаешь. Мы тут запустили код к твоей статье про печать в ВТЛ, и ты представляешь (?) поймали тот самый AV. Наверно мы криворукие.

AS>Писать на плюсах просто надо уметь.


Ну, учись.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.03 18:38
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

Кстати, структуру БД приведи. Я у себя прогонию.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.03 18:38
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>На VBS не проверял, но думаю, что это по быстрее получится.


Гы-гы.

A>> Оставлять ссылки


AS>Это как?


Ну, вот так например:
Private Sub Process(ByVal path As String)
  Dim cmd As New SqlCommand()


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

AS>Во-вторых, зачем его закрывать? Программа завершится, оно и закроется.


Она кстати не закроется. Если толтько ВБ не помежет (что вряд ли). Но серверу на это чихать.

AS>Ты свой код сначала покажи, прежде чем мой работающий хаять.


Да все у тебя с коннекшеном нормально. Это он к ВБ не привык.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.03 18:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Представить себе каталог, который будет обрабатываться 5-6 часов я не в состоянии. Так что, как видишь, виноват не дотнет.


Подъезжай как-нить покажу.

AVK>PS: Читабельность твоего кода преотвратнейшая, еле разобрался.


Согласен.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.08.03 18:38
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>А если еще и команды заготовить заранее, а в цикле только задавать значения параметров?


Получишь пару процентов выигрыша. Вам уде сто первый раз говорят — основные тормоза идут от работы с БД.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Многомерные Массивы в C# :)
От: Silver_s Ниоткуда  
Дата: 28.08.03 19:20
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну в общем прошло уже несколько больше года. Да и ладно уж "крупные". Хотя бы один пример коммерческого проекта под дотнет "широкого" масштаба.


Насколько широкого масштаба? Что какой нибудь WinRar ждешь дотнетовский или ErWin. Такие тиражные продукты имеют долгую историю с постепенными переходами от версии к версии, так просто не перескочишь на дотнет.
А так дотнетизируемся все равно потихоньку на новых продуктах. Мы вот внесли свой вклад, московскую "Планету фитнес" задотнетизировали недавно. Не широкомасштабный продукт, но несколько десятков рабочих мест, ну может сотня будет. Именно настольные клиенты, зачем юзерам мучаться с броузерами, проще один раз фреймворк установить. А альтернативы и небыло для настольной части кроме как WinForms, на чем еще можно быстро реализовать механизм полуавтоматического строгания сотни навороченых форм. Очень малыми силами делался проект. И к тому же махом привинчивались фсякие аппаратные фичи типа цифровых фотокамер, читалок смарткарт.
Сейчас еще один проект делаем для них, естейственно на дотнете. В нем вобще интерфейсная часть навороченая, полностью все рисованое начиная со скролбаров с полупрозрачными ползунками и кончая таблицами.
В графике тоже альтернатив не видно — дотнет и GDI+ в этом деле рулят. Теоретически GDI+ тормозной, а на практике это никак не сказывается, так получается что не возникает ситуаций что надо одновременно весь экран перерисовывать со скоростью 40 кадров в секунду. Да ни начем больше это не сделаешь, не тратить же один человеко/год на разработку рисованых контролов.
Так что дотнет вещь очень юзабельная, дай ему только время развернуться.
Re[25]: Массивы в C#
От: Аноним  
Дата: 28.08.03 19:45
Оценка:
А я вот создал новый пустой проект, хотел потестить, скопировал второй листинг, а он не пашет — выдаёт ошибку вот в этой строке —
DirectoryInfo dirInfo = new DirectoryInfo(path);

Подумал что path не задан. Задал —
path = "\\";

а он всё равно не пашет
Re[23]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 29.08.03 04:22
Оценка:
Hello, VladD2!
You wrote on Thu, 28 Aug 2003 18:38:03 GMT:

хъ

V> Больше небыло? Ай-йа-йа. Ну, это потому что ты свой код не запускаешь.

V> Мы тут запустили код к твоей статье про печать в ВТЛ, и ты представляешь
V> (?) поймали тот самый AV. Наверно мы криворукие.

Где?

AS>> Писать на плюсах просто надо уметь.


V > Ну, учись.

Приводи ошибку, посмотрим, кто виноват.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[26]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.03 06:20
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Dispose специально закоментировал, так как без него быстрее. Получилось на

AS>папке temp 51 файл в секунду. Что очень не плохо.

Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в секунду. На самом деле это даже заниженая цифра, поскольку в момент теста я еще и сообщения в янусе читал. Так что зря ты диспозы повыкидывал.

AS>Неужели все дело было в дополнительных объектаз-параметрах, которые не

AS>убивались?

Скорее в том что работа с одним коннекшеном вобще без диспозов любых объектов оставляет какие то ресурсы mssql неосвобожденными. Надо было глядеть память не программы а mssql и смотреть его счетчики.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[26]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.03 06:20
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Представить себе каталог, который будет обрабатываться 5-6 часов я не в состоянии. Так что, как видишь, виноват не дотнет.


VD>Подъезжай как-нить покажу.


320 файлов/сек. 6ч * 3600 = 21600 сек. Примерно 7 миллионов файлов! Ты ничего не путаешь?
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[26]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.03 06:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>А я вот создал новый пустой проект, хотел потестить, скопировал второй листинг, а он не пашет — выдаёт ошибку вот в этой строке —

А>
А>DirectoryInfo dirInfo = new DirectoryInfo(path);
А>


Ошибка какая? Может ты параметры в командной строке не задал? Нужно первым параметром путь к каталогу, а вторым true для рекурсивного разбора или false для разбора только верхнего уровня.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[28]: Массивы в C#
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 29.08.03 07:24
Оценка:
Здравствуйте, VladD2, Вы писали:

_>>А если еще и команды заготовить заранее, а в цикле только задавать значения параметров?

VD>Получишь пару процентов выигрыша.

Может, и меньше — SqlCommand не держит unmanaged-ресурсов. Но практика полезная, при использовании OleDbCommand каждое создание команды по сравнению с повторным использованием — вызов IDBCreateCommand.CreateCommand и байндинг параметров заново.
Re[27]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 29.08.03 08:48
Оценка:
Hello, AndrewVK!
You wrote on Fri, 29 Aug 2003 06:20:35 GMT:

AS>> Dispose специально закоментировал, так как без него быстрее.

AS>> Получилось на папке temp 51 файл в секунду. Что очень не плохо.

A> Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в

A> секунду. На самом деле это даже заниженая цифра, поскольку в момент
A> теста я еще и сообщения в янусе читал. Так что зря ты диспозы
A> повыкидывал.

Раскоментировал диспозы и запустил на папке program files. Там у меня
примерно 68 тыс. файлов. Первые несколько минут работало все шустро, но
потом — опять тормоза. Машинка у меня не сильная: Celeron 950, 256 Mb.
Поставил счетчики на все, что можно (уже потом, когда конкретно все
тормозило). SQL Server не тормозит, с ним все пучком. память не растет и
вообще все стабильно.
Меня больше заинтересовали счетчики .net memory
Ситуация такая: первое поколение все время растет. 0 поколение стабильно и
не растет почти всегда. Иногда скачок в нем приводит к увеличению 1
поколения, после чего в 0 поколении все нормализуется. Вместе с 1 поколением
растет, естественно bytes in heap.
Потом, когда 1 поколение уж очень сильно нахапает памятухи оно собирается и
увеличивается второе поколение (вообще-то оно постоянно увиличивается, но по
тихоньку). Очень сильно увеличивается только в момент сбора в первом
поколении.
Короче, лик очевидный.
Но где?

хъ

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[28]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.03 09:11
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Раскоментировал диспозы и запустил на папке program files. Там у меня

AS>примерно 68 тыс. файлов. Первые несколько минут работало все шустро, но
AS>потом — опять тормоза.

Вывод — не те диспозы . У меня ведь не тормозит. Ищи причину дальше.

AS> Машинка у меня не сильная: Celeron 950, 256 Mb.


Ну не намного хуже моей.

AS>Короче, лик очевидный.

AS>Но где?

Ну сравни в чем отличия твоей и моей программы.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[29]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.08.03 09:11
Оценка:
Здравствуйте, desperado_gmbh, Вы писали:

_>Может, и меньше — SqlCommand не держит unmanaged-ресурсов.


А если Prepare() позвать?
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[30]: Массивы в C#
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 29.08.03 09:20
Оценка:
Здравствуйте, AndrewVK, Вы писали:

_>>Может, и меньше — SqlCommand не держит unmanaged-ресурсов.

AVK>А если Prepare() позвать?

Тогда команда будет держаться в памяти до закрытия соединения. Ну разве что можно изменить текст или параметры и выполнить заново, что вызовет Unprepare, но это извращение.

Кстати, Dispose у SqlCommand вообще не используется.
Re[29]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 29.08.03 12:17
Оценка:
Hello, AndrewVK!
You wrote on Fri, 29 Aug 2003 09:11:22 GMT:

хъ
Короче, залил я эти файлы: Process 75113 files in 02:56:01.6160000.

Я не понимаю, в чем отличия твоего кода от моего, кроме переоткрытия
соединени каждый раз в фунции Process.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[27]: Массивы в C#
От: Аноним  
Дата: 29.08.03 22:51
Оценка:
AVK>Ошибка какая? Может ты параметры в командной строке не задал? Нужно первым параметром путь к каталогу, а вторым true для рекурсивного разбора или false для разбора только верхнего уровня.


recursive = false;
path = "C://";

/*
try
{
    path = args[0];
    recursive = bool.Parse(args[1]);
}
catch
{
    throw new ArgumentException("Invalid command line arguments");
}
*/

System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(path);


Теперь ошибка такая "An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll Additional information: System error." в строке:


try
{
    cmd.ExecuteNonQuery();
}


видать Sql не подключен. Извеняюсь — не скажете как его подрубить?
Re[24]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.08.03 23:35
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

V>> Больше небыло? Ай-йа-йа. Ну, это потому что ты свой код не запускаешь.

V>> Мы тут запустили код к твоей статье про печать в ВТЛ, и ты представляешь
V>> (?) поймали тот самый AV. Наверно мы криворукие.

AS>Где?


Вообще-то тебе было об этом сказано и ты вроде даже поправил. Но факт есть факт.

AS>Приводи ошибку, посмотрим, кто виноват.


Если не ошибаюсь это был вот этот код:

    //Получение хэндла принтера по умолчанию
    HANDLE hPrinter;
    DWORD dwSz = 0x100;
    DWORD dwLastErr = -1;
    PTSTR pBuf = 0;
    while (!GetDefaultPrinter(pBuf,&dwSz))
    {
        dwLastErr = GetLastError();
        if (dwLastErr == ERROR_INSUFFICIENT_BUFFER){
            if (pBuf) delete[] pBuf;
            pBuf = new TCHAR[dwSz];
            dwLastErr = ERROR_SUCCESS;
        }
        else break;
    }

    if (dwLastErr == ERROR_SUCCESS){
        OpenPrinter(pBuf, &hPrinter, NULL);
    }

    if (pBuf) delete[] pBuf;

    // Получение структуры PRINTER_INFO_2 для данного хэндла
    LPBYTE pBufpi = 0;
    DWORD dwSzNeeded = 0;
    dwLastErr = -1;
    while (!GetPrinter(hPrinter,2,pBufpi,dwSzNeeded,&dwSzNeeded))
    {
        dwLastErr = GetLastError();
        if (dwLastErr == ERROR_INSUFFICIENT_BUFFER){
            if (pBufpi) delete[] pBufpi;
            pBufpi = new BYTE[dwSzNeeded];
            dwLastErr = ERROR_SUCCESS;
        }
        else break;
    }

    if (dwLastErr == ERROR_SUCCESS){
        LPPRINTER_INFO_2 pPI = (LPPRINTER_INFO_2)pBufpi;
        // Работаем со структурой
        HDC hDC = CreateDC(NULL, pPI->pPrinterName, NULL, pPI->pDevMode);
        // Работаем с контекстом
        // Удаляем контекст
        DeleteDC(hDC);
    }

    if (pBufpi) delete[] pBufpi;


На пашине с Вынь Сервер 2003 без установленных принтреров был АВ. На всех остальных был ассерт об использовании не инициализированной переменной hPrinter. Но С++ тут конечно непричем. Тут проверки написаны через задницу.

В общем, как бы кто крут не был, но позвлять себе других тоже уважать нужно. Ну, или хоть смайлики ставь.
Тут многие не глупее тебя, а многие и умнее.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.08.03 23:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>320 файлов/сек. 6ч * 3600 = 21600 сек. Примерно 7 миллионов файлов! Ты ничего не путаешь?


Каталог диска открывается только 5 минут. Файлов там не 7 миллионов и но компиляция chm-а идет где-то два часа. И это только один каталог, а таких у нас на некоторых машинах хватает.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.08.03 23:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в секунду.


Директории моаленькие. Да и не передашь по сети ты с такой скоростью. В общем 10 мегабит сеть + пол миллиона файлов и часик протарахтит как милая.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.08.03 23:35
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

Попробуй вынести рабочий код в отдельную функцию (вне рекурсии). Тогда память цепляться не будет.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Массивы в C#
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 30.08.03 08:08
Оценка:
Hello, VladD2!
You wrote on Fri, 29 Aug 2003 23:35:35 GMT:

[поскипанный код не относится к последней статье]

V> На пашине с Вынь Сервер 2003 без установленных принтреров был АВ. На

V> всех остальных был ассерт об использовании не инициализированной
V> переменной hPrinter. Но С++ тут конечно непричем. Тут проверки написаны
V> через задницу.

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

V> В общем, как бы кто крут не был, но позвлять себе других тоже уважать

V> нужно. Ну, или хоть смайлики ставь. Тут многие не глупее тебя, а многие
V> и умнее.

В детском садике нужно сравнивать кто умнее.

With best regards, Alex Shirshov.
Posted via RSDN NNTP Server 1.7 beta
Re[26]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.08.03 09:38
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Согласен. Но заметь, код я сразу же, без разговоров переписал. Но ошибка

AS>была и я ее признаю.

Я тебе, говорю не о том, что ты ламер, а о том, что к другим тоже нужно отнаситься более лаяльно. Тем более товаришь явно подкованный.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.08.03 16:19
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Теперь ошибка такая "An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll Additional information: System error." в строке:

А>видать Sql не подключен. Извеняюсь — не скажете как его подрубить?

Установить MSSQL Server, создать базу Test, в ней табличку files и две ХП, текст которых я приводил. Состав полей таблички можно увидеть по второй ХП.
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[28]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.08.03 16:19
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Ну судя по моим результатам 45328/140.84 получается примерно 322 файла в секунду.


VD>Директории моаленькие.


А как скорость зависит от размера директории?

VD>Да и не передашь по сети ты с такой скоростью.


А при чем тут сеть?
... << RSDN@Home 1.1 beta 1 >>
AVK Blog
Re[29]: Массивы в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.08.03 17:23
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А как скорость зависит от размера директории?


Обратно пропорционально. На больших директориях тормоза начинаются еще те.

VD>>Да и не передашь по сети ты с такой скоростью.


AVK>А при чем тут сеть?


А нафиг иначе пути (локальные) в БД складывать?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Массивы в C#
От: mihailik Украина  
Дата: 05.09.03 15:10
Оценка:
Сделал без записи на сервер, чтоб отделить скорость собственно .NET и "скорость работы Алексея с ADO.NET". Код специально совершенно неоптимальный, в скриптовом стиле. Чтоб было видно, что дотнет и такое стерпит.

Даже свойства FileInfo лень было смотреть в документации, просто перебираю через Reflection. Остальное в том же духе.

Средняя скорость перебора даже со всеми этими тормозами — 490 файлов в секунду.

D:\Program Files
17:51:11
Total time: 139.0 sec, 68213 files, 490.6 by sec.


Присоединяюсь к мнению AVK. Дайте мне такой винчестер, чтоб там такой перебор работал пять часов. Я таких объёмов ещё в руках не держал.


using System;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Threading;

class Run
{
    static readonly string rootPath=
        Path.GetPathRoot( System.Environment.SystemDirectory )+"Program Files";

    static ArrayList files=new ArrayList();
    static bool complete=false;

    static void Main()
    {
        Console.WriteLine( rootPath );
        DateTime start=DateTime.Now;
        Console.WriteLine( start.ToLongTimeString() );

        // Чтобы красиво отпечатывать прогресс, запустим-ка его в отдельном потоке...
        new ThreadStart( asyncMain ).BeginInvoke( null, null );
        while( !complete )
        {
            // Собственно, прогресс
            DateTime startSecond=DateTime.Now;
            int startSecondCount=files.Count;
            Thread.Sleep(1000);
            if( files.Count>0 )
            {
                Console.Write(
                    "\r"+
                    (DateTime.Now-start).TotalSeconds.ToString("0.0")+" sec, "+
                    files.Count+" files, "+
                    ( (files.Count-startSecondCount)/(DateTime.Now-startSecond).TotalSeconds ).ToString("0.0")+" by sec..." );
            }                
        }

        // Итоги
        Console.WriteLine(
            "\rTotal time: "+(DateTime.Now-start).TotalSeconds.ToString("0.0")+" sec, "+
            files.Count+" files, "+
            ( files.Count/(DateTime.Now-start).TotalSeconds ).ToString("0.0")+" by sec." );

        Console.Write( "show random..." ); Console.ReadLine();
        

        // Чтоб никто не сомневался, выводим три случайных файла из набора
        Console.WriteLine( "\nRandom files:\n" );

        Random rnd=new Random();
        for( int i=0; i<3; i++ )
        {
            Console.WriteLine( files[rnd.Next(files.Count)] );
        }


        Console.Write( "quit..." ); Console.ReadLine();
    }

    static void asyncMain()
    {
        try
        {
            addFiles(rootPath);
        }
        catch( Exception e )
        {
            Console.WriteLine( e );
        }
        finally
        {
            complete=true;
        }
    }

    static void addFiles(string folder)
    {
        foreach( string dir in Directory.GetDirectories(folder) )
        {
            // Единственное аккуратное место во всей программе -
            // объекты DirectoryInfo не уходят в "лавину рекурсии".
            // В стеке только строки.
            addFiles( Path.Combine(folder,dir) );            
        }

        foreach( string file in Directory.GetFiles(folder) )
        {

            FileInfo fsi=new FileInfo( 
                Path.Combine(folder,file) );

            // Нам StringBuilder ни к чему. Мы не торопимся.
            string fileStr=file+"\n";

            // А фиг ли этот MSDN. Всё и так в метаданных прописано.
            // И кешировать typeof(FileInfo), кстати, тоже не будем.
            foreach( PropertyInfo prop in fsi.GetType().GetProperties() )
            {
                fileStr+=
                    "\t"+prop.Name+": "+prop.GetValue(fsi,null)+"\n";
            }

            files.Add(fileStr);
        }
    }
}
... << RSDN@Home 1.1 beta 1 >>
Re[25]: Массивы в C#
От: mihailik Украина  
Дата: 05.09.03 15:14
Оценка:
Сделал без записи на сервер, чтоб отделить скорость собственно .NET и "скорость работы Алексея с ADO.NET". Код специально совершенно неоптимальный, в скриптовом стиле. Чтоб было видно, что дотнет и такое стерпит.

Даже свойства FileInfo лень было смотреть в документации, просто перебираю через Reflection. Остальное в том же духе.

Средняя скорость перебора даже со всеми этими тормозами — 490 файлов в секунду.

D:\Program Files
17:51:11
Total time: 139.0 sec, 68213 files, 490.6 by sec.


Присоединяюсь к мнению AVK. Дайте мне такой винчестер, чтоб там такой перебор работал пять часов. Я таких объёмов ещё в руках не держал.


using System;
using System.Collections;
using System.IO;
using System.Reflection;
using System.Threading;

class Run
{
    static readonly string rootPath=
        Path.GetPathRoot( System.Environment.SystemDirectory )+"Program Files";

    static ArrayList files=new ArrayList();
    static bool complete=false;

    static void Main()
    {
        Console.WriteLine( rootPath );
        DateTime start=DateTime.Now;
        Console.WriteLine( start.ToLongTimeString() );

        // Чтобы красиво отпечатывать прогресс, запустим-ка его в отдельном потоке...
        new ThreadStart( asyncMain ).BeginInvoke( null, null );
        while( !complete )
        {
            // Собственно, прогресс
            DateTime startSecond=DateTime.Now;
            int startSecondCount=files.Count;
            Thread.Sleep(1000);
            if( files.Count>0 )
            {
                Console.Write(
                    "\r"+
                    (DateTime.Now-start).TotalSeconds.ToString("0.0")+" sec, "+
                    files.Count+" files, "+
                    ( (files.Count-startSecondCount)/(DateTime.Now-startSecond).TotalSeconds ).ToString("0.0")+" by sec..." );
            }                
        }

        // Итоги
        Console.WriteLine(
            "\rTotal time: "+(DateTime.Now-start).TotalSeconds.ToString("0.0")+" sec, "+
            files.Count+" files, "+
            ( files.Count/(DateTime.Now-start).TotalSeconds ).ToString("0.0")+" by sec." );

        Console.Write( "show random..." ); Console.ReadLine();
        

        // Чтоб никто не сомневался, выводим три случайных файла из набора
        Console.WriteLine( "\nRandom files:\n" );

        Random rnd=new Random();
        for( int i=0; i<3; i++ )
        {
            Console.WriteLine( files[rnd.Next(files.Count)] );
        }


        Console.Write( "quit..." ); Console.ReadLine();
    }

    static void asyncMain()
    {
        try
        {
            addFiles(rootPath);
        }
        catch( Exception e )
        {
            Console.WriteLine( e );
        }
        finally
        {
            complete=true;
        }
    }

    static void addFiles(string folder)
    {
        foreach( string dir in Directory.GetDirectories(folder) )
        {
            // Единственное аккуратное место во всей программе -
            // объекты DirectoryInfo не уходят в "лавину рекурсии".
            // В стеке только строки.
            addFiles( Path.Combine(folder,dir) );            
        }

        foreach( string file in Directory.GetFiles(folder) )
        {

            FileInfo fsi=new FileInfo( 
                Path.Combine(folder,file) );

            // Нам StringBuilder ни к чему. Мы не торопимся.
            string fileStr=file+"\n";

            // А фиг ли этот MSDN. Всё и так в метаданных прописано.
            // И кешировать typeof(FileInfo), кстати, тоже не будем.
            foreach( PropertyInfo prop in fsi.GetType().GetProperties() )
            {
                fileStr+=
                    "\t"+prop.Name+": "+prop.GetValue(fsi,null)+"\n";
            }

            files.Add(fileStr);
        }
    }
}
... << RSDN@Home 1.1 beta 1 >>
Re[26]: Массивы в C#
От: Lloyd Россия  
Дата: 05.09.03 15:47
Оценка:
Здравствуйте, mihailik, Вы писали:

Тебе так нравится быть в top 100 в рейтинге активности?
Re[27]: Массивы в C#
От: mihailik Украина  
Дата: 05.09.03 17:08
Оценка:
L>Тебе так нравится быть в top 100 в рейтинге активности?

Зря ты так.

Все меня теперь шпыняют, а дело-то в глюкавом Янусе.
... << RSDN@Home 1.1 beta 1 >>
Re[6]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.09.03 08:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Шарпе есть понятие массив массивов, а есть многомерный массив. Точ то ты спрашивал (про ассоциативные массивы) вообще к языку не оносится. А то, что тебе показывал АВК — это как раз массивы одномерные (временами вложенные).


Вложенные одномерные массивы и есть многомерный массив. В MSDN это зовут jagged arrays
... << RSDN@Home 1.1 beta 2 (np: тихо) >>
AVK Blog
Re[8]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.09.03 08:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, не знаю я с С++ и Дельфи за пять минут перелез. Конечно тонкости есть везде, но хэш-таблицы они и в африке хэш-таблицы (правда в Дельфи они появились только в шестерке).


Строковый хеш в пятерке был точно, а может и раньше.
... << RSDN@Home 1.1 beta 2 (np: тихо) >>
AVK Blog
Re[8]: Массивы в C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.09.03 08:44
Оценка:
Здравствуйте, VladD2, Вы писали:

I>>ХМ, разве масисв массивов не одно и тоже что и много мерный массив?


VD>Да. Это разные вещи. Вот смотри:


В MSDN и то и то зовется многомерными массивами, но первое jagged array, второе rectangle array.


VD>Нет. Как видишь массивы массивов гибче.


Но медленнее, особенно для процессоров с большим кешем.
... << RSDN@Home 1.1 beta 2 (np: тихо) >>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.