Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2016, 22:45   #11
player95
 
Регистрация: 16.10.2016
Сообщений: 9
По умолчанию

)) В отладчике я увидел корректную работу. null он не стал ибо там есть освобождение (System.Runtime.InteropServices.Mar shal.FinalReleaseComObject(obj); ), о чем писал Пепел Феникса выше.

Последний раз редактировалось Alex11223; 16.10.2016 в 22:57.
player95 вне форума Ответить с цитированием
Старый 16.10.2016, 22:57   #12
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

вообще-то он как раз писал
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
надо освобождать каждую переменную из пространства имен интеропа.
А про FinalReleaseComObject вроде не все так просто
http://stackoverflow.com/questions/3...leasecomobject
http://stackoverflow.com/a/38111137/964478

ну и в моем коде его нет, ничего не висело и без него.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.10.2016, 23:00   #13
player95
 
Регистрация: 16.10.2016
Сообщений: 9
По умолчанию

Я ведь и освобождаю каждую.
Код:
          releaseObject(ExcelApp);
            releaseObject(workbooks);
            releaseObject(ExcelWorkBook);
            releaseObject(ExcelWorkSheet);
            releaseObject(ExcelRange);
Тут проблема именно в том что если путь прямо писать, а не через переменную или с чем то дополнительным то все хорошо. Вот что странно.
player95 вне форума Ответить с цитированием
Старый 16.10.2016, 23:06   #14
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык переменные не станут null и GC.Collect не поможет.
Цитата:
Сообщение от player95 Посмотреть сообщение
Тут проблема именно в том что если путь прямо писать, а не через переменную или с чем то дополнительным то все хорошо. Вот что странно.
попробуйте запустить без отладчика и в релиз сборке.
Или может быть вы не только переменную для пути создали, но и что-то еще поменяли?

и еще освобождать наверно правильнее не в таком порядке, а наоборот.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.10.2016, 23:15   #15
player95
 
Регистрация: 16.10.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
попробуйте запустить без отладчика и в релиз сборке.
Супер! Запуск в релиз сборке помог. Вроде как все корректно выгружается. А почему в Debug такое было?
player95 вне форума Ответить с цитированием
Старый 16.10.2016, 23:25   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну как минимум потому что по ссылке выше говорят, что
Цитата:
when running under the debugger, local references will be artificially kept alive until the end of the method
И может быть GC как-то по-другому (реже?) срабатывает, я не в курсе.

Мне кажется у вас releaseObject сейчас бесполезный и оно очищается только потому что переменные и так уничтожаются после test и GC их самостоятельно очищает потом.

Попробуйте вообще убрать releaseObject, что-то поменялось?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.10.2016, 00:12   #17
player95
 
Регистрация: 16.10.2016
Сообщений: 9
По умолчанию

Действительно, если запускать через релиз то похоже достаточно только этого GC.Collect();. Получается можно оставить только сборщик мусора? А это высвобождение и не нужно? Главное запускать в релизе?

Последний раз редактировалось player95; 17.10.2016 в 00:20.
player95 вне форума Ответить с цитированием
Старый 17.10.2016, 00:24   #18
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Надо почитать сообщения на первой странице и ссылку выше.

Мой код и в дебаге работал

Если переменные локальные и вам не важно освободить именно в данный момент, то можно и GC.Collect не вызывать наверно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.10.2016, 00:33   #19
player95
 
Регистрация: 16.10.2016
Сообщений: 9
По умолчанию

Освобождать нужно именно в данный момент как раз, зачем и были у меня все эти высвобождения. Код ваш посмотрел, раньше у меня с null тоже все работало, и по моему как раз когда тоже в виде переменной было записано. Хотя уже не помню, может и прямой путь был. Попробую еще в дебаге сделать null по вашему примеру. Большое спасибо за помощь!
player95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выгрузка из MySQL в Excel (некорректный файл Excel) Maxx PHP 4 16.09.2015 00:07
Выгрузка в Excel city32 Общие вопросы Delphi 2 18.10.2012 15:58
Выгрузка dll из всех процессов Anton911 Win Api 3 01.08.2012 14:50
Выгрузка из БД в Excel fenetka Microsoft Office Excel 6 20.10.2011 09:06
Выгрузка данных из БД в Excel Rougez Microsoft Office Excel 3 17.06.2011 13:06