Re: Вопрос по поводу Thread
От: Mike Chaliy Украина http://chaliy.name
Дата: 29.11.08 20:41
Оценка: 3 (1) +1
Здравствуйте, Koss87, Вы писали:

K>Доброго времени суток 8)


K>итак ситуация заключается в следующем:


K>1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю)

K>2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко)
K>3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)

Я бы все сделал синхронно. Просто перед каждой операцией над каталогом (добовление файла, скачивание файла) вызывал бы метод УдалитьВсеСтарыеФайлы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
А тут я живу и пишу...
Re[5]: Вопрос по поводу Thread
От: Lloyd Россия  
Дата: 30.11.08 00:20
Оценка: +2
Здравствуйте, Koss87, Вы писали:

L>>Если есть доступ к виндовому шедулеру, то написать батник, удаляющий устаревшие файлы. И запускать его по расписанию.

L>>Дешево и сердито.

K>не спорю вариант клевый, но если учитывать что даже если есть доступ к серваку прямой)) то можно и самому раз в неделю удалять 8),


Я имел в виду запуск на сервере, не с внешнего компьютера.

K>меня интересует именно способы удаления прямо из самой веб апликации. Веть не спорю батник повесить в винде на авто выполнение не так уж и сложно, другое дело как по средствам АСПА и СИ шарпа можно это зделать.. (


Это самоцель?
Если нет, то задачу всегда нужно решать наиболее простым способом. Запуск батника как раз из разряда таких.
Re: Вопрос по поводу Thread
От: seregaa Ниоткуда http://blogtani.ru
Дата: 28.11.08 14:44
Оценка: 3 (1)
Здравствуйте, Koss87, Вы писали:

K>1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю)

K>2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко)
K>3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)

я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Вопрос по поводу Thread
От: seregaa Ниоткуда http://blogtani.ru
Дата: 28.11.08 15:05
Оценка: 3 (1)
Здравствуйте, Koss87, Вы писали:

K>Здравствуйте, seregaa, Вы писали:

S>>я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад.
K>приведи пример пожалуйста кода реализации "даржания потока" и пример кода проверки файлов в папке..

Типа того:

{
...
Thread a = new Thread(new ThreadStart(DeleteFile));
a.Start();
...
}



private void DeleteFile()
{
    string tempDir = @"c:\temp";
    TimeSpan age = new TimeSpan(1, 0, 0);
        
    foreach(string fileName in Directory.GetFiles(tempDir)
    {
        if(DateTime.Now - File.GetCreationTime(fileName) > age)
            File.Delete(fileName)
    }
    Thread.Sleep(3600000);
}
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re: Вопрос по поводу Thread
От: Аlexey  
Дата: 27.11.08 09:39
Оценка: 2 (1)
Здравствуйте, Koss87, Вы писали:

K>какие последствия вызова потока со слипом в час или день?

Создание потока довольно дорого, например по умолчанию кушается 1МБ виртуальной памяти. Т.к. в вашем решении потоки будут жить долго, то и ресурсов сервера будет тратится прилично. Это отрицательно скажется на масштабируемости.

K>--- проживет ли поток час или день?

Процесс в котором выполняется ваше серверное приложение может регулярно перезапускаться, поэтому выживание потока не гарантировано.

K>--- сможет ли он удалить файл по истечению столь долгого времени и после закрытия юзером окна браузера?

Если поток останется жить, то файл удалится. Открыт браузер или нет не имеет значения.

K>--- могут ли потоки вызвать какие либо ошибки на сервере и не удалить файлы?

K>--- поистечению времени и удаления файла потоки умрут или нет?
Умрут.
K>--- если потоки не умрут то как их убить без участия пользователя (пользователь закончил работать вырубил клиентский комп и ушел дамой 8)?
K>--- и в общем кто может сказать хороший ли это способ удалять файлы по истечению времени и какие есть альтернативные способы

Я бы сделал что-то вроде очереди сообщений на удаление файла. Для реализации можно использовать базу данных либо MSMQ.
Очередь регулярно просматривается и при необходимости удаляются файлы.

K>просьба отвечать как можно полнее и если есть примеры любых технологий приводите примеры ПЛЗ!!


K>С уважением Koss87
Re[4]: Вопрос по поводу Thread
От: C...R...a...S...H  
Дата: 29.11.08 17:15
Оценка: 2 (1)
Здравствуйте, seregaa, Вы писали:

S>
S>private void DeleteFile()
S>{
S>    string tempDir = @"c:\temp";
S>    TimeSpan age = new TimeSpan(1, 0, 0);
        
S>    foreach(string fileName in Directory.GetFiles(tempDir)
S>    {
S>        if(DateTime.Now - File.GetCreationTime(fileName) > age)
S>            File.Delete(fileName)
S>    }
S>    Thread.Sleep(3600000);
S>}
S>

Если в таком коде будет Exception то упадет все вплоть до рестарта w3wp.
Самый лучший способ предложен Аlexey.
Я бы сделал службу Windows, которой в очередь отправлял файлы, и пусть она следит за ними.
Там было написано русским по белому...
Re[5]: Вопрос по поводу Thread
От: seregaa Ниоткуда http://blogtani.ru
Дата: 29.11.08 18:43
Оценка: 2 (1)
Здравствуйте, C...R...a...S...H, Вы писали:

CRA>Если в таком коде будет Exception то упадет все вплоть до рестарта w3wp.

CRA>Самый лучший способ предложен Аlexey.
CRA>Я бы сделал службу Windows, которой в очередь отправлял файлы, и пусть она следит за ними.

Что мешает добавить в этот код обработку ошибок? Это ведь было не готовое решение, а прототип, иллюстрация.
А прикручивать очередь или сервис только для удаления временных файлов имхо есть овердизайн. Сама папка с файлами и есть очередь, где порядок элементов определяется датой создания.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[4]: Вопрос по поводу Thread
От: seregaa Ниоткуда http://blogtani.ru
Дата: 28.11.08 15:06
Оценка: 1 (1)
Здравствуйте, seregaa, Вы писали:


Thread a = new Thread(new ThreadStart(DeleteFile));
a.Start();


делать один раз при старте приложения
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Вопрос по поводу Thread
От: Lloyd Россия  
Дата: 29.11.08 23:59
Оценка: +1
Здравствуйте, Koss87, Вы писали:

K>Но всетаки если есть у когото еще варианты прошу предлогать)


Если есть доступ к виндовому шедулеру, то написать батник, удаляющий устаревшие файлы. И запускать его по расписанию.
Дешево и сердито.
Вопрос по поводу Thread
От: Koss87  
Дата: 26.11.08 18:50
Оценка:
Доброго времени суток 8)

итак ситуация заключается в следующем:

1- есть функция которая формерует отчет в формате ПДФ она записует данный в физическую дерикторию на сервере (файл физически создан ... подробности упускаю)
2- после нажатия кнопки на форме пользователю предоставляется возможность скачать файл (файлы скачиваются четко)
3- вовремя скачивания файла запускается поток который вызывает функцию удаляющую файл по истечению времени (допустим срок годности один час)

вызов потока
{
...
Thread a = new Thread(new ThreadStart(DeleteFile));
a.Start();
...
}

функция удаления
private void DeleteFile()
{
    Thread.Sleep(3600000);
    File.Delete(phPath + "Downloads\\PDF\\" + tmp);
}


файлы удаляються тоже нормально(при слипе 30 секунд) на час не пробывал ибо времени нету тестить (

Вопрос!!!

какие последствия вызова потока со слипом в час или день?
--- проживет ли поток час или день?
--- сможет ли он удалить файл по истечению столь долгого времени и после закрытия юзером окна браузера?
--- могут ли потоки вызвать какие либо ошибки на сервере и не удалить файлы?
--- поистечению времени и удаления файла потоки умрут или нет?
--- если потоки не умрут то как их убить без участия пользователя (пользователь закончил работать вырубил клиентский комп и ушел дамой 8)?
--- и в общем кто может сказать хороший ли это способ удалять файлы по истечению времени и какие есть альтернативные способы

просьба отвечать как можно полнее и если есть примеры любых технологий приводите примеры ПЛЗ!!

С уважением Koss87
Re[2]: Вопрос по поводу Thread
От: Koss87  
Дата: 28.11.08 11:21
Оценка:
Здравствуйте, Аlexey, Вы писали:

А>Я бы сделал что-то вроде очереди сообщений на удаление файла. Для реализации можно использовать базу данных либо MSMQ.

А>Очередь регулярно просматривается и при необходимости удаляются файлы.

могбы ты привести примеры кода , или ссылки на литературу де можно прочитать про эту фишку? ато очень интерестно как зделать...
Re[2]: Вопрос по поводу Thread
От: Koss87  
Дата: 28.11.08 14:51
Оценка:
Здравствуйте, seregaa, Вы писали:
S>я бы держал один поток, который просыпался бы раз в час и удалял из папки все файлы, созданые ранее чем час назад.
приведи пример пожалуйста кода реализации "даржания потока" и пример кода проверки файлов в папке..
Re[2]: Вопрос по поводу Thread
От: Koss87  
Дата: 29.11.08 23:42
Оценка:
Здравствуйте, Mike Chaliy, Вы писали:
MC>Я бы все сделал синхронно. Просто перед каждой операцией над каталогом (добовление файла, скачивание файла) вызывал бы метод УдалитьВсеСтарыеФайлы.

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

Но всетаки если есть у когото еще варианты прошу предлогать)
Re[4]: Вопрос по поводу Thread
От: Koss87  
Дата: 30.11.08 00:07
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если есть доступ к виндовому шедулеру, то написать батник, удаляющий устаревшие файлы. И запускать его по расписанию.

L>Дешево и сердито.

не спорю вариант клевый, но если учитывать что даже если есть доступ к серваку прямой)) то можно и самому раз в неделю удалять 8), меня интересует именно способы удаления прямо из самой веб апликации. Веть не спорю батник повесить в винде на авто выполнение не так уж и сложно, другое дело как по средствам АСПА и СИ шарпа можно это зделать.. (

Но вариант реально сердитый___)) спасибо ))
Re[5]: Вопрос по поводу Thread
От: C...R...a...S...H  
Дата: 01.12.08 06:53
Оценка:
Здравствуйте, Koss87, Вы писали:

Может быть вам тогда на AppStart все это дело просто удалять?
И не париться?
Там было написано русским по белому...
Re[6]: Вопрос по поводу Thread
От: Mike Chaliy Украина http://chaliy.name
Дата: 01.12.08 20:21
Оценка:
Здравствуйте, C...R...a...S...H, Вы писали:

CRA>Здравствуйте, Koss87, Вы писали:


CRA>Может быть вам тогда на AppStart все это дело просто удалять?

CRA>И не париться?

Да и каждых пару часов делать АутОфМемори, так чтобы этот AppStart наступал .
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
А тут я живу и пишу...
Re[4]: Вопрос по поводу Thread
От: OTMOP Россия  
Дата: 09.12.08 19:11
Оценка:
Здравствуйте, seregaa, Вы писали:

На многих хостингах время жизни приложения ограничено. Если к нему нет обращений в течении, скажем, 20 минут, то оно высвобождается, я правильно понимаю?

Вариант с таким спящим потом мне нравится, но что если его будить каждые, скажем, 5 минут, не для полезной работы, а просто, для поддержания приложения живым, а раз в час загружать полезной работой, тогда приложение не умрёт в течении долгого срока?
Viva la Resistance!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.