2012-04-20 16 views
0

私たちは、asp.net(vb)Webアプリケーションのチャート作成にzedgraph Webコントロールを使用します。生成されたイメージの一時ディレクトリがいっぱいになり、現在は2GB +に達しています。zedgraphイメージの一時ディレクトリを自動消去する方法は?

このディレクトリを自動的に消去する方法はありますか、そこから古いファイルを削除するには厄介なHttpContext.Cache expired callbackハックを実装する必要がありますか?

おかげで、フロ

答えて

1

だから、むしろ私の手の汚れ編集を取得し、zedgraphweb http://sourceforge.net/projects/zedgraphを再コンパイルするよりも、私は、ファイルの量に自分自身を扱う、より一般的なapporachを選びました。私はキャッシュのCacheItemRemovedCallbackを使って、タイマーのようなWebアプリケーションでコードを実行しています。このコードでもキャッシュアイテムが補充されるため、サイクルが更新されます。 voila:ディスククリーンアップは、Webアプリケーションで5分ごとに実行されます。

Public Module Maintenance 
    Private Const triggerKey As String = "MaintenanceDiskCleaner" 
    Friend Sub Run() 
     Try 
      SyncLock triggerKey 
       If Hosting.HostingEnvironment.Cache(triggerKey) Is Nothing Then 
        Hosting.HostingEnvironment.Cache.Add(triggerKey, _ 
                DateTime.Now, _ 
                Nothing, _ 
                DateTime.Now.AddMinutes(5), _ 
                Cache.NoSlidingExpiration, _ 
                CacheItemPriority.Default, _ 
                AddressOf CacheItemRemovedCallback) 
       End If 
      End SyncLock 
     Catch ex As Exception 

     End Try 
    End Sub 

    Public Sub CacheItemRemovedCallback(ByVal key As String, ByVal value As Object, ByVal reason As CacheItemRemovedReason) 
     Try 
      Dim dir As String = Hosting.HostingEnvironment.MapPath("~\ZedGraphImages") 
      If Directory.Exists(dir) Then 

       SyncLock triggerKey 
        Dim di As DirectoryInfo = New DirectoryInfo(dir) 
        Dim files As FileSystemInfo() = di.GetFileSystemInfos() 
        For Each file As FileSystemInfo In From f In files Where f.CreationTime < CType(value, DateTime) 
         Try 
          WebTools.Files.TryDelete(file.Name, 50) 
         Catch ex As Exception 

         End Try 
        Next 
       End SyncLock 

      End If 
      Run() 
     Catch ex As Exception 

     End Try 
    End Sub 
End Module 
関連する問題