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...
Пока на собственное сообщение не было ответов, его можно удалить.