Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление tmp файлов при выборках в курсоры / 13 сообщений из 13, страница 1 из 1
13.04.2012, 13:46
    #37752399
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Здравствуйте.
Есть последовательный цикл выборки каких-то данных с созданием необходимых курсоров. При каждом цикле все курсоры закрываются, типа:
авторselect * from table 1 into cursor cur1 readwrite nofilter
...
use in cur1
То есть закрываю ненужные всегда.
При создании курсоров в папке temp соответственно создаются файлики *.tmp
Так вот проблема в том что при закрытии курсоров tmp файлы обычно удаляются, но есть которые не удаляются. Я переименовал один из них в *.dbf - открыл, знаю что за курсор, по тексту программы его закрываю 100%, потому что при следующем цикле выбираю новые данные в курсор с таким же именем. Перед созданием каждого курсора дополнительно идет проверка:
авторif used('cur1')
use in cur1
endif
Весь цикл включает в себя порядка 20 тыс повторений выборок, то есть при каждой создается (и не удаляется) один из файлов *.tmp, то есть в какой то момент происходит переполнение файлов в папке temp и программа останавливается.
Как побороть?
Уже и в отладчике смотрю - по тексту программы все нормально. Вот не удаляются файлы связанный именно с одним курсором, хоть тресни.
...
Рейтинг: 0 / 0
13.04.2012, 14:03
    #37752453
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Никогда с подобным не сталкивался. обычно .TMP файлы остаются при вылетании фокса.
попробуй не закрывать курсор, возможно тот же файл будет использоваться.

и что значит "происходит переполнение файлов в папке temp" ? там нет ограничений на количество файлов
...
Рейтинг: 0 / 0
13.04.2012, 14:07
    #37752468
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Попробуйте в папку положить 10 тыс файлов - потом расскажите про ограничения.
Курсор как не закрывать? Разные данные же вынимаются при каждом цикле.
Вот выдержка и хелпа.
Опция NOFILTER создает временный курсор, который может использоваться в последующих Запросах.
Примечание
При использовании опции NOFILTER повышается производительность выполнения запроса; временная таблица создается в этом случае на диске. Когда курсор закрывается - временная таблица удаляется с диска.
...
Рейтинг: 0 / 0
13.04.2012, 14:14
    #37752492
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
А. С.Попробуйте в папку положить 10 тыс файлов - потом расскажите про ограничения.
есть у меня такие папки :) если ее не открывать проводником - все работает

А. С.Курсор как не закрывать? Разные данные же вынимаются при каждом цикле.
Код: sql
1.
select * from table 1 into cursor cur1 readwrite nofilter


select сам закрывает курсор и создает новый с тем же именем. Есть предположение что временный файлик при этом останется с тем же именем. это только предположение.
...
Рейтинг: 0 / 0
13.04.2012, 14:24
    #37752531
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Если много tmp то в какой-то момент фокс новый перестает создавать.
HeplCURSOR CursorName [NOFILTER | READWRITE]
Размещение результатов Запроса во временном Курсоре.

Примечание
Если вы определяете имя уже открытой таблицы, Visual FoxPro генерирует сообщение об ошибке.
...
Рейтинг: 0 / 0
13.04.2012, 14:30
    #37752548
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
А. С.Если много tmp то в какой-то момент фокс новый перестает создавать.
HeplCURSOR CursorName [NOFILTER | READWRITE]
Размещение результатов Запроса во временном Курсоре.

Примечание
Если вы определяете имя уже открытой таблицы , Visual FoxPro генерирует сообщение об ошибке.

Сам то прочитал что скопипастил?
Вот тебе не лень сюда хэлп копировать. Просто возьми и попробуй не закрывать курсор.
...
Рейтинг: 0 / 0
13.04.2012, 14:30
    #37752549
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
А. С.,

Это может быть связано с малым временным интервалом между созданием/уничножением файлов, ОС не успевает нормально отработать. Кардинальный выход - менять алгоритм, без создания курсоров в цикле
...
Рейтинг: 0 / 0
13.04.2012, 14:38
    #37752576
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Т.к. ошибка редкая, сокрее всего глюк фокса, неплохо бы попытаться смоделировать на простом примере и сюда выложить.
попробовал так сделать, 9 .TMP файлов в итоге:
Код: sql
1.
2.
3.
4.
for i = 1 to 100000
   select * from MyTyble where nId = i%10000 into cursor cur1 nofilter readwrite
   use in cur1
endfor
...
Рейтинг: 0 / 0
13.04.2012, 14:45
    #37752603
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Попробовал не закрывать - сообщение об ошибке "Alias name is already in use".
Файловая система ни при чем, я в отладчике пошагово пробую - не удаляет.
...
Рейтинг: 0 / 0
13.04.2012, 14:50
    #37752623
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
А. С.Попробовал не закрывать - сообщение об ошибке "Alias name is already in use".
Файловая система ни при чем, я в отладчике пошагово пробую - не удаляет.
выполни
Код: sql
1.
2.
3.
select * from table 1 into cursor cur1 readwrite nofilter
select * from table 1 into cursor cur1 readwrite nofilter
select * from table 1 into cursor cur1 readwrite nofilter


у меня так работает.

Дальше в ходе не используешь ALTER TABLE cur1 ... ?
...
Рейтинг: 0 / 0
13.04.2012, 14:58
    #37752656
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
ALTER TABLE cur1 ...
не советую так делать, иногда мистика начинается если ALTER TABLE для курсора вызывать, в т.ч. ошибка "Alias name is already in use"
лучше все преобразование структуры включить в селект.
...
Рейтинг: 0 / 0
13.04.2012, 15:03
    #37752670
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
заметил что именно при выполнении ALTER TABLE файл записывается на диск. Поле добавлял логическое, сейчас попробую сразу в селекте добавить.
...
Рейтинг: 0 / 0
13.04.2012, 15:13
    #37752696
А. С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление tmp файлов при выборках в курсоры
Все, точно alter table - убрал, стал удаляться. Спасибо за внимание. Закрываем.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление tmp файлов при выборках в курсоры / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]