0

asp.net(vb)Webアプリでのグラフ作成には、zedgraphWebコントロールを使用します。生成されたイメージの一時ディレクトリがいっぱいになり、2GB以上に達しました。

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

ありがとう、Flo

4

1 に答える 1

1

そのため、zedgraphweb http://sourceforge.net/projects/zedgraphを編集して再コンパイルするのではなく、ファイルの量を自分で処理する、より一般的なアプローチを選択しました。キャッシュのCacheItemRemovedCallbackを使用して、タイマーを使用するようにWebアプリでコードを実行しています。また、このコードはキャッシュアイテムを補充するため、サイクルを更新します。出来上がり: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
于 2012-04-21T20:45:14.383 に答える