Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 197

Куда в таком простом коде утекает память?

12.05.2016, 13:52. Показов 1433. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не пойму куда девается память в этом простом коде:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
        For Each dir_name As String In Directory.GetDirectories(Application.StartupPath())
            For Each file_name As String In Directory.GetFiles(dir_name)
                If file_name.Substring(file_name.Length - 3) = "tif" Then
                    imgGFC1 = New Bitmap(file_name)
                End If
                If Dir("1" & file_name) <> "" Then ' наличие этого условия пожирает память
                    ' не важно какой здесь код, наличие этого условия пожирает память
                End If
                GC.Collect() ' Вызов сборщика мусора, никакого проку нет
            Next
        Next
Цикл перебирает изображения в папках, большие, много, сколько угодно. Но как только появляется второе условие так сразу память мигом заканчивается. Как так? Вроде второе условие не имеет отношение к проблеме, в чем дело?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2016, 13:52
Ответы с готовыми решениями:

Куда утекает память
Проблема такая, когда озу загружена на ~70% ОСь начинает спамить оповещения о том, что ей не хватает памяти и нужно закрыть какое то из...

Куда утекает память
Бесполезный код проверяет время работы функции. Память выделяется под массив и высвобождается перед выходом из функции. Тем не...

Куда утекает память при копировании изображения в буфер обмена
В цикле Repeat копирую изображение в буфер обмена. Вроде освобождаю, но количество памяти занимаемой приложением ростёт по 19 - 21 Кб в...

8
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.05.2016, 14:15
А почему не использовать стандартные методы получения списка файлов? Как-то так что ли
VB.NET
1
Dim tifFiles = Directory.GetFiles(Application.StartupPath, "*.tif", SearchOption.AllDirectories)
1
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
12.05.2016, 14:19
Цитата Сообщение от Sampl Посмотреть сообщение
Не пойму куда девается память в этом простом коде:
Вы уверены, что есть утечка? Если следите по диспетчеру задач, то там показывается не используемая, а выделенная память.
0
17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 197
12.05.2016, 14:37  [ТС]
Память заканчивается через несколько секунд работы программы, если утилитой RamMap непрерывно очищать память Modified Page List то может работать бесконечно.

Добавлено через 6 минут
Спасибо, Дядявова, код удалось упростить, буду использовать для перебора файлов в папках.
VB.NET
1
2
3
4
5
6
7
        For Each TifFiles As String In Directory.GetFiles(Application.StartupPath, "*.tif", SearchOption.AllDirectories)
            imgGFC1 = New Bitmap(TifFiles)
            If Dir("1" & TifFiles) <> "" Then ' наличие этого условия пожирает память
                ' не важно какой здесь код, наличие этого условия пожирает память
            End If
            GC.Collect() ' Вызов сборщика мусора
        Next
А проблема похоже в том, что я для примера указал в условии путь "1" & TifFiles , а это видимо делать почему-то недопустимо. Буду копать.
0
646 / 474 / 39
Регистрация: 04.11.2013
Сообщений: 1,951
12.05.2016, 14:43

Не по теме:

GetExtension(file_name) - получение расширения файла




А по теме - в тырнетах рекомендуют использовать такую конструкцию:
VB.NET
1
If Len(Dir("1" & file_name)) = 0 Then
Я бы еще явно указал папку:

VB.NET
1
If Len(Dir(Application.StartupPath & "\1" & file_name)) = 0 Then
1
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
12.05.2016, 14:50
Цитата Сообщение от Sampl Посмотреть сообщение
что я для примера указал в условии путь "1" & TifFiles
Ну так TifFiles - это ведь полное имя файла. И что получится, если вначале добавить еще что-то?
0
646 / 474 / 39
Регистрация: 04.11.2013
Сообщений: 1,951
12.05.2016, 15:01
Лучший ответ Сообщение было отмечено Sampl как решение

Решение

П.С. Вот так, наверно, правильнее, только проверь, надо подставлять "1" или "\1".
VB.NET
1
If Not My.Computer.FileSystem.FileExists(FileIO.FileSystem.GetFileInfo(TifFiles).DirectoryName & "1" & FileIO.FileSystem.GetName(TifFiles))
1
 Аватар для XIST
1960 / 1061 / 148
Регистрация: 01.10.2009
Сообщений: 3,588
Записей в блоге: 1
12.05.2016, 17:00
Цитата Сообщение от Sampl Посмотреть сообщение
Не пойму куда девается память в этом простом коде:
in .NET!!!
0
17 / 9 / 4
Регистрация: 09.02.2014
Сообщений: 197
19.05.2016, 04:50  [ТС]
Чудесным образом замена Dir на FileExists решила проблему с утечкой памяти. Теперь для проверки наличия файла использую только FileExists.
Спасибо, Proidoha
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2016, 04:50
Помогаю со студенческими работами здесь

Не понимаю, куда утекает память при заупске процесса, хотя все free
Пишу Shell в си коде. Вводится строка, ее разбиваю на слова и заношу все это в двумерный динамический массив. До этого момента с памятью...

Куда "утекает" память или верить ли Диспетчеру задач?
Помогите разобраться, плз: в приложении некоторые данные загружаются из базы mysql, используется библиотека libmysql. При выборе строки в...

Куда утекает трафик?
Здравствуйте! У меня очень серьезная проблема. Я, в силу обстоятельств, пользуюсь сейчас только мобильным интернетом с лимитом 2,5Гб в...

Куда утекает весь трафик?
В последнее время обеспокоился слежкой спецслужб за людьми и поставил прогу для учета трафика. Не пойму, куда у меня утекло 450 и 37 ГБ!!...

Утекает память
Доброго времени суток! Помогите исправить утечку памяти. Пишет что утечка в 37 строке! LPVOID SafeMemPool::Alloc(DWORD dwBytes) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru