Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: System.OutOfMemoryException Добавлено: 02.03.08 20:36  

Автор вопроса:  Кирилл | Web-сайт: kozlovssoft.z16.ru | ICQ: 467555686 

Ответить

  Ответы Всего ответов: 82  

Номер ответа: 31
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #31 Добавлено: 03.03.08 16:55
и быстродействие для него не критично!
Быстродействие для хорошего программиста (имхо)критично ВСЕГДА!
ReDim Preserve, если тут, собрались такие знатоки коллекций, то может Ника, мне расскажет как в коллекции при вызове метода Add(item) изменяется ее размерность?
Ну раз ты настаиваешь - изволь послушать...
Если взглянуть декомпилятором на код этого метода то мы увидим следующее:

Public Sub Add(ByVal item As T)
    If (Me._size = Me._items.Length) Then
        Me.EnsureCapacity((Me._size + 1))
    End If
    Me._items(Me._size++) = item
    Me._version += 1
End Sub

Private Sub EnsureCapacity(ByVal min As Integer)
    If (Me._items.Length < min) Then
        Dim num As Integer = IIf((Me._items.Length = 0), 4, (Me._items.Length * 2))
        If (num < min) Then
            num = min
        End If
        Me.Capacity = num
    End If
End Sub


Глядя на строчку кода:
Dim num As Integer = IIf((Me._items.Length = 0), 4, (Me._items.Length * 2))

можно сделать вывод, что если коллекция пуста, то ее размер делается равным 4, в противном случае размер УДВАИВАЕТСЯ от текущего размера, но никак не увеличивается на 1 потому что операция перераспределения памяти довольно дорога!!! Надеюсь ЭТО остудит твой пыл и ты осознаешь, что был не прав!

P.S. учитель Ника, код в студию

Я бы с радостью это сделала и поучавствовала в Вашем споре, но я не использую VB, а код на C# на этом форуме не уместен. К тому же Steel Brand привел вполне достойный код.

З.Ы. От спора по поводу API я бы тебе тоже рекомендовала извиниться и отказаться - снова в лужу сядешь!

Ответить

Номер ответа: 32
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #32 Добавлено: 03.03.08 17:01
Ну и в доказательство слов Steel Branda сущность всего происходящего:

Public Property Capacity As Integer
    Get
        Return Me._items.Length
    End Get
    Set(ByVal value As Integer)
        If (value <> Me._items.Length) Then
            If (value < Me._size) Then
                ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.value, ExceptionResource.ArgumentOutOfRange_SmallCapacity)
            End If
            If (value > 0) Then
                Dim destinationArray As T() = New T(value  - 1) {}
                If (Me._size > 0) Then
                    Array.Copy(Me._items, 0, destinationArray, 0, Me._size)
                End If
                Me._items = destinationArray
            Else
                Me._items = List(Of T)._emptyArray
            End If
        End If
    End Set
End Property

Ответить

Номер ответа: 33
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #33 Добавлено: 03.03.08 17:14
Спасибо :)

Ответить

Номер ответа: 34
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #34 Добавлено: 03.03.08 17:27
интересно получаеться свойство "размерность", в коллекциях не только на чтение, но и на запись?

Ответить

Номер ответа: 35
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #35 Добавлено: 03.03.08 17:29
незнаю как там шарпе, но в басике оно точно только на чтение

Ответить

Номер ответа: 36
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #36 Добавлено: 03.03.08 17:39
смотря что подразумевать по быстродействием, если скорость конкретного метода, согласен! но если речь идет о больших проектах, то если не разбивать код на логические единицы, то скорость дальнейшей отладки и внесения изменений буит стоять дороже, в $ эквиваленте! в своем первом примере я пытался показать как можно сделать, но не говорил что мой код самый оптимальный! и давайте вернемся к пользователю этого кода! если он использует его как "черный ящик", спору нет! что хотим то и колбасим внутри, добиваясь оптимальной производительности! но когда это только часть класса, то надо найти оптимальное соотношение «Ваше время»\»время выполнения метода»! вижу, тут собрались люди, которые не ценят свое время

Ответить

Номер ответа: 37
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #37 Добавлено: 03.03.08 18:19
Public Property Capacity() As Integer

Свойство Capacity работает на чтение и на запись везде, и в C#, и в VB .NET

Ответить

Номер ответа: 38
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #38 Добавлено: 03.03.08 18:36
смотря что подразумевать по быстродействием, если скорость конкретного метода, согласен!

Я подразумеваю под "быстродействием" именно "быстродействие", и не обязательно это скорость конкретного метода, скорее это общая ощущаемая скорость работы.

Можно также сказать что поразумевается скорость работы постоянно используемых методов - то есть если метод который используется редко будет выполняться 5-10 секунд, это не так критично, если же речь идет о методе, который используется постоянно и обрабатывает ощутимые объемы данных, то разница между оптимизированным кодом и неоптимизированным в "$ эквиваленте" будет очень большая и совсем не в пользу неоптимизированного кода!

но если речь идет о больших проектах, то если не разбивать код на логические единицы, то скорость дальнейшей отладки и внесения изменений буит стоять дороже, в $ эквиваленте!

О чем ты говоришь? Ты хоть раз видел "большой проект", не разбитый на "логические единицы"?

И мне не ясно как разбиение на "логические единицы" противоречит оптимизации кода и отсутствию банального дол****ства при написании кода?

в своем первом примере я пытался показать как можно сделать, но не говорил что мой код самый оптимальный!

Тебе же объяснили какие конкретные очень явные лаги будут в коде
Пойми, не всегда нужно писать как хочется! При написании кода нужно думать о том что он будет работать в реальных условиях и иногда бывает нужно потратить 10 минут хотя бы на чтение документации на метод вместо того чтоб писать откровенную лажу которую НЕЛЬЗЯ пускать в продакшн.

и давайте вернемся к пользователю этого кода! если он использует его как "черный ящик", спору нет! что хотим то и колбасим внутри, добиваясь оптимальной производительности!

Почитай что такое ООП и т.п. - и ты поймешь что большинство кода как раз и нужно писать и использовать как "черный ящик"

но когда это только часть класса, то надо найти оптимальное соотношение «Ваше время»\»время выполнения метода»! вижу, тут собрались люди, которые не ценят свое время

Ты можешь говорить что угодно, но никакого оправдания написанию полного г**вна вместо качественного кода ты не найдешь!

Я же тебе привел примеры - предложенный тобою вариант отрабатывает в 20 раз медленнее чем мой! Как ты будешь оправдывать то что пользователь фтыкает в монитор 3 минуты вместо 10 секунд? Что ты скажешь заказчику? "Ты нихрена не шаришь, а я человек который ценит свое время"?

Ответить

Номер ответа: 39
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #39 Добавлено: 03.03.08 18:37
незнаю как там шарпе, но в басике оно точно только на чтение

Блин, ну может уже хватит ерунду городить и откроешь наконец таки MSDN?

Public Overridable Property Capacity() As Integer
    Member of System.Collections.ArrayList

Summary:
Gets or sets the number of elements that the System.Collections.ArrayList can contain.


Public Property Capacity() As Integer
    Member of System.Collections.CollectionBase

Summary:
Gets or sets the number of elements that the System.Collections.CollectionBase can contain.

Public Property Capacity() As Integer
    Member of System.Collections.Generic.List(Of T)

Summary:
Gets or sets the total number of elements the internal data structure can hold without resizing.

Public Overridable Property Capacity() As Integer
    Member of System.Collections.SortedList

Summary:
Gets or sets the capacity of a System.Collections.SortedList object


то надо найти оптимальное соотношение «Ваше время»\»время выполнения метода»! вижу, тут собрались люди, которые не ценят свое время

А это уже вообще глупость.. Никакое соотношение не может служить оправданием кривизны кода. Как раз таки наоборот, я слишком ценю свое время чтобы писать такой убогий код, и потом удивляться: а почему он у меня работает 3 минуты вместо 9 секунд? И тратить "часы" на переписывание кода и его отладку отладку!

Ответить

Номер ответа: 40
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #40 Добавлено: 03.03.08 19:00
дорогие умники и умницы, в следующий раз когда кто-то что то спросит! вы сразу пишите ему 100% идеальный код! а не умничайте в конце 3-й страницы, что человек дал новичку один из алгоритмов решения его задачи! а что и как "оптимизировать это уже его проблема" почему-то не кто из вас двоих не выложил ни одного даже "медленого" примера! а начали потыкать автора в том, что он использует 32-х размерный массив!!! а искать оплошности в чужом коде, каждый может! но рас речь зашла уже о быстродействии! тогда марш все на ассемблер! иногда, в случаях, когда от тебя требуют мгновенной реакции, не до оптимизации! а писать что все до..ебы и их код говно! так тогда и мелкомягкие говно, так как их софт значительно уступает в производительности их конкурентов! но темнемение даже такие "знатоки" как вы пользуетесь их продуктами"!

Ответить

Номер ответа: 41
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #41 Добавлено: 03.03.08 19:26
Ты курнул или в школе не учился? Почему предложения начинаются с маленькой буквы а в конце каждого предложения восклицательный знак?

дорогие умники и умницы, в следующий раз когда кто-то что то спросит! вы сразу пишите ему 100% идеальный код! а не умничайте в конце 3-й страницы, что человек дал новичку один из алгоритмов решения его задачи! а что и как "оптимизировать это уже его проблема" почему-то не кто из вас двоих не выложил ни одного даже "медленого" примера!

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

а начали потыкать автора в том, что он использует 32-х размерный массив!!!

Exception of type 'System.OutOfMemoryException' was thrown.
Обьесните, пожалуйста, что ето может значить

Человек просил объяснить почему при объявлении 32-х мерного массива происходит исключение. Я это объяснил. Ответ полностью по теме.

Просто при дальнейшем рассуждении над этим вопросом меня догнало что такое реально 32-х мерный массив и я позволил себе пропустить еще несколько сообщений чтоб уберечь остальных испытателей от подобных экспериментов и кстати очень внятно объяснил почему они не будут работать.

а искать оплошности в чужом коде, каждый может!

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

но рас речь зашла уже о быстродействии! тогда марш все на ассемблер!

Хочешь еще один бенчмарк? Я не против, только с тем куском который я кинул в 22-м сообщении, потому что я за****ся писать тебе коды для бенчмарков, не получив ни одного твоего кода взамен. (Ты-то свое время ценишь, а вот мое похоже не очень)

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

иногда, в случаях, когда от тебя требуют мгновенной реакции, не до оптимизации!

Не поверишь - я дополнительно не занимался оптимизацией с кодом который я сюда кидал - я всегда так пишу.

Оптимизировать и мой код можно, но опять же - это дисковые операции, и вряд ли ты что-то сделаешь быстрее.

а писать что все до..ебы и их код говно!

Блин, ну это ж так и есть!

тогда и мелкомягкие говно, так как их софт значительно уступает в производительности их конкурентов!

Конкуренты Microsoft? КТО ОНИ??? ПОКАЖИ!

но темнемение даже такие "знатоки" как вы пользуетесь их продуктами"!

Я использую продукцию Microsoft потому что это на данный момент лучшая для меня продукция на рынке.

Но даже если ты пишешь на "говнософте от Microsoft", то опять же - это не оправдание того что ты пишешь отстойный код.

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

Ответить

Номер ответа: 42
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #42 Добавлено: 03.03.08 19:35
в следующий раз когда кто-то что то спросит! вы сразу пишите ему 100% идеальный код!

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

Не надо называть твой "код" алгоритмом, он этого не достоин.
А знаешь что самое страшное? Этот новичок рассчитывает на то, что ему дадут квалифицированный ответ, а вместо этого ему подсовывают откровенную лажу. Более того, он его по неопытности скопирует в свой проект, запустит, и будет 3 минуты "фтыкать в монитор".. а затем будет на всех форумах кричать, что NET - это лажа и тормоза! Но ему это пока простительно, он новичок.. Но ты то, по сравнению с ним, считаешь себя программистом!
но рас речь зашла уже о быстродействии! тогда марш все на ассемблер!

Не надо передергивать.. об ассемблере никто не говорил, речь идет исключительно о NET
а писать что все до..ебы и их код говно! так тогда и мелкомягкие говно

Т.е. ты себя и свой "код" сравниваешь с кодом MS???? Спасибо, насмешил...

Ответить

Номер ответа: 43
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #43
Добавлено: 03.03.08 22:02
а затем будет на всех форумах кричать, что NET - это лажа и тормоза!

Какая разница, каким способом падаван приходит к Истине?

Ответить

Номер ответа: 44
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #44 Добавлено: 03.03.08 23:45
труъ

Ответить

Номер ответа: 45
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #45 Добавлено: 04.03.08 11:01
День добрый, как и обещал вчера, я принес триммер с использованием FindFirstFile, FindNextFile api - функций, которые как подтверждает практика, работают гораздо шустрее. Статистика такая винт 360 гиг (RAID0), два логических раздела C,D 306423 файлов, время на сканирование 3,8 с. пример, который любезно нам предоставил Steel Brand 7,4c! Ну что господа вопросы будут? (коль разговор пошел о быстродействии)! оба проекта были скомпилированы, и запущены по 2 раза! дабы исключить влияния кэширования файловой системы! Код библиотеки ReadFile, специально инкапсулирован, дабы его «кривизну», не могли увидеть новечки! Всем желающим посмотреть его исходник, могу выслать на почту!


Пример Steel Brand

    Function LoadAllFiles() As List(Of String)
        ;Dim result As New List(Of String)
       ‘ For Each Drive In DriveInfo.GetDrives
        ‘ If Drive.DriveType = DriveType.Fixed Then
         ‘ LoadFiles(Drive.RootDirectory.FullName, result)
         ‘ End If
’ Next
       LoadFiles(“C:\”, result)
       LoadFiles(“D:\”, result)

‘ диски прописаны статично, так как наличие сетевых дисков усложняет эту задачу
‘ при желании, можно включить и их, но картина не меняется

        Return result
    End Function

    Sub LoadFiles(ByVal path As String, ByVal files As List(Of String))
        Try
            files.AddRange(IO.Directory.GetFiles(path))
            For Each SubDirectory In IO.Directory.GetDirectories(path)
                LoadFiles(SubDirectory, files)
            Next
        Catch ex As UnauthorizedAccessException
            ' все хорошо
        End Try
    End Sub

    Sub Main()
        ;Dim start = Now
        ;Dim Files = LoadAllFiles()
        Console.WriteLine(Now.Subtract(start))
    End Sub

Мой пример

        ;Dim n As Integer
        ;Dim Files As Collections.Generic.List(Of String)
        ;Dim ReadFile As New clsFiles

        n = System.Environment.TickCount

        ReadFile.Read("C:\";)
        ReadFile.Read(";D:\";)

        Files = ReadFile.Files

        MsgBox(System.Environment.TickCount - n)

‘ библиотека ReadFile.dll – по почте

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам