Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
danrusm
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 306
1

Загруженный в память файл продолжает находиться там даже после выполнения кода

27.12.2012, 18:04. Просмотров 547. Ответов 6
Метки нет (Все метки)

Всем привет, проблема вот в чём, bytearray = File.ReadAllBytes(filepath); вот этой строкой считываю файл около 200 мегабайт, после исполнения кода он остаётся в памяти, хотя жесткий ссылок нет, точнее я их не вижу. Помогите пожалуйста найти проблему.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private static StorageBar GetHST(string filepath)
        {
            byte[] bytearray = null;
            try
            {
                bytearray = File.ReadAllBytes(filepath);
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }
            System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();
            string Symbol = utf8.GetString(bytearray, 68, 12);
            Int32 period = BitConverter.ToInt32(bytearray, 80),
                digits = BitConverter.ToInt32(bytearray, 84);
            //-------------Rates-------------
            List<Bar> BarArray = new List<Bar>((bytearray.Length - 148) / 44);
            Int32 i = 148, ctm; 
            Single open, low, hight, close, volume;
            while (i < bytearray.Length)
            {
                ctm = BitConverter.ToInt32(bytearray, i); i += 4;
                open = (Single)BitConverter.ToDouble(bytearray, i); i += 8;
                low = (Single)BitConverter.ToDouble(bytearray, i); i += 8;
                hight = (Single)BitConverter.ToDouble(bytearray, i); i += 8;
                close = (Single)BitConverter.ToDouble(bytearray, i); i += 8;
                volume = (Single)BitConverter.ToDouble(bytearray, i); i += 8;
                BarArray.Add(new Bar(hight, open, close, low, volume, ctm)); 
            }
            return new StorageBar(Symbol, period, digits, BarArray);
        }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 18:04
Ответы с готовыми решениями:

Почему после изменения кода продолжает выполняться сценарий старого кода?
ВОПРОС Почему после изменения кода продолжает выполняться сценарий старого кода? ИМЕЕТСЯ...

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

Не могу файл чтобы отредактировать код в Joomla, на скриншоте показано, там пишет inline, где находиться этот файл?
Не могу файл чтобы отредактировать код в Joomla, на скриншоте показано, там пишет inline, где...

Определите, где будет находиться робот после выполнения команд
Вот сама задача: &quot;На координатной плоскости в точке (0;0) стоит робот, который смотрит по...

Какие значения будут находиться в регистрах и ячейках памяти после выполнения команд?
Какие значение будут находится в регистрах и ячейках памяти после выполнения команд МП: mov ax,bx...

6
Learx
1047 / 854 / 194
Регистрация: 31.03.2010
Сообщений: 2,498
27.12.2012, 18:36 2
удаление из памяти выполняется сборщиком мусора. Сборщик мусора активируется по мере необходимости, или время от времени чтоб удалить лишние объекты и на это почти невозможно повлиять.
вызовите GC.Collect() - это сообщит собрщику мусора о необходимости чистки, но когда он выполнит её - заранее неизвесно.
0
danrusm
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 306
27.12.2012, 20:47  [ТС] 3
Пробовал вызывать GC.Collect() даже с указанием поколений, не помогает, размер потребляемой памяти доводил многократными вызовами почти до гигабайта. Может в 64 битной системе это и нормально, недостатка памяти нет, всего установлено 16 гигабайт. Мой процесс 32 битный.

Добавлено через 1 час 12 минут
Выдаёт исключение OutOfMemoryException, но чистить память не хочет.
0
nvnlive
36 / 19 / 1
Регистрация: 14.12.2012
Сообщений: 59
27.12.2012, 23:28 4
Метод private static StorageBar GetHST(string filepath) - объявлен как static. Его класс тоже static? Поскольку метод также объявлен как private, вызываете вы его где-то внутри класса, и результат сохраняете (где-то в static классе).
Может быть в этом проблема? Попробуйте переделать код на обычный класс и работать через его экземпляры, или разобраться, где там внутри static класса накапливаются результаты.
0
danrusm
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 306
28.12.2012, 08:50  [ТС] 5
Точно подмечено, но пожиратель памяти не передаётся ни куда, и ссылка не приходит из вне, так что вроде бы в этом всё в порядке.
0
m0nax
1211 / 916 / 110
Регистрация: 12.01.2010
Сообщений: 1,909
Завершенные тесты: 3
28.12.2012, 09:19 6
ну я вижу что файл считывают целиком и заполняют BarArray.Add(new Bar(hight, open, close, low, volume, ctm));
что не так то?)) прочитал файл, сохранил все его данные в BarArray, ясен пень он не исчезнет из памяти..т.е сам по себе byte[] bytearray исчезнет, а данные то которые в BarArray никуда не денутся
2
danrusm
49 / 49 / 2
Регистрация: 17.07.2011
Сообщений: 306
28.12.2012, 10:19  [ТС] 7
Да, вы правы, прозевал, просто у меня два типа файлов, бинарник и csv, по идее они должны были содержать одинаковое количество данных, но на деле оказалась большая разница.
0
28.12.2012, 10:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2012, 10:19

После замены озу не включается компьютер ( плата не издаёт звук) даже если вернуть старую память
Материнская плата asus p5kc. Можно подключить либо ддр2 либо ддр3, стояло 2 по 1гб ддр2. Купил 2...

SaveDialog: вернуть память после выполнения
как сделать чтоб SaveDialog вернул мне память после выполненияSaveDialo-&gt;Execute(); вот как я...

Компьютер был внесён в групповые политики, потом удалён, но продолжает видеть себя там
Здравствуйте! Такая проблема: Компьютер был внесён в групповые политики, потом удалён из них, Но...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru