注意,我不是在谈论编译器而产生的"临时ASP.NET 文件"。

我的网应用程序(ASP.NET 视)使用Graphviz产生的图像,然后送给客户。这需要建立的临时文件。

什么是最好的方式来处理这些?有没有办法删除其后立即他们就送了?我应该利用一种背景线?东西在Application_Start或Application_End?

有帮助吗?

解决方案

你不能通过控制器或使用ASHX( http://www.marklio.com/marklio/CommentView,guid,df8d6471-83fd-4f66-a799-ef8274979f0e.aspx )流出内容并删除临时文件一次你写完了流吗?

其他提示

Graphviz创建的客户,并增加了它们作为一个链接的网页。所以你不能删除。

有几种方法:

  • 在应用程序启动时,没有人应该使用这些图像。所以你可以删除它
  • 您添加一个参考图像(如路径),以缓存,并添加一个CacheItemRemovedCallback,将删除你的形象。(限制很好地量图像在你的高清
  • 做一个计时器,即删除的项目周期性

要知道,你不应该删除的图像,这是创建的第二个前。由于他们可以使用。

使用其他用户描述的方法,但要求浏览器使用其缓存,如果它想要再次通过设置如果你得到一个,那么响应中的Last-Modifed头然后在图像处理程序中 If-Modified-Since标头,处理程序应该用StatusCode 304“NOT Modified”回复。这样,只要客户端浏览器没有清除其缓存,图像仍会显示。

我喜欢在生成它们的同一操作中处理由操作创建的临时文件。例如:(在MVC中,但这可以适用于任何框架)

public ActionResult Foo()
{
    FooCleanup(); // deletes files in "~/temp/Foo/" older than a day or so

    string filename = CreateTemporaryFile(); // Creates a temporary file like "~/temp/Foo/{timestamp}.foo"
    return File(filename);
}

如果Foo()被大量调用,你可以添加一些逻辑,只是经常调用清理。这有点像穷人的cron工作,但效果很好。

我们使用带有计时器类型的application_start以每24小时的间隔运行,并且每天清理/删除临时文件文件夹一次。

您可以创建一个处理程序(.ashx)并通过它传输临时文件。这样你就会知道文件已被转移到客户端,你可以删除处理程序末尾的临时文件。

此问题可能是客户端无法下载文件两次,因为您要立即删除它。 (然后可以使用页面输出缓存来缓解...)

虽然最好的办法是,如果你能够完全避免临时文件问题,并根据请求流出文件,通过在处理程序中生成它......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top