• michael.groh (3/31/2009)


    It always concerns me when I see an endless loop used as a timing device. It'd seem that having a number of packages running on a server, each using an endless loop as a file watcher, might be detrimental to performance.

    It's very easy to add a "Sleep" statement in the body of the loop to put the thread to sleep for a few seconds or minutes:

    System.Threading.Thread.Sleep(milliseconds)

    I've done the file watcher thing by putting the thread to sleep for 60000 milliseconds (one minute), and counting how many minutes have transpired before failing the task:

    Dim i As int

    While True

    If System.IO.File.Exists(Dts.Variables("FlatFileConnection").Value.ToString)Then

    Exit While

    Else

    System.Threading.Thread.Sleep(60000)

    i += 1

    'Exit after 240 minutes (4 hours):

    If i > 240 Then

    Exit While

    End If

    End If

    End While

    This is much simpler and more efficient code than using a DateTime variable and comparing it's value to Now(). The way the code in this article is written, Now() is called millions and millions of times in the body of the loop, while in the revised loop, the comparison is performed only once a minute, and, at most, 240 times. The revised loop achieves the same objective while requiring a lot fewer CPU cycles.

    I created a DTS and a SSIS Package to check for the existence of a backup file, rename and move the file to an archive folder and a task to delete the files after a given date. It needs to have a timer and when it finds the file it loads it into a Table. That was years ago.

    Does anyone have sample code to do this?

    For better, quicker answers on T-SQL questions, click on the following...
    http://www.sqlservercentral.com/articles/Best+Practices/61537/

    For better answers on performance questions, click on the following...
    http://www.sqlservercentral.com/articles/SQLServerCentral/66909/