在打开并发送文件之前,您是否知道检查文件是否存在严重的性能问题?此上下文是一个Web应用程序,它通过ASP页面动态提供文件。我被告知没有检查文件是否存在,因为数据库存储了这些信息,不应该是错误的。当然,由于各种原因,它有时会出错,所以我们最终不会发回任何让用户不满意的事情。
我的直觉是检查文件的存在是如此便宜,你不应该担心它,但我被告知否则。如果有帮助的话,我们的存储解决方案是一个非常强大的存储解决方案(不仅仅是Web服务器上的IDE驱动器)。我的问题基本上是:我的直觉是否正确?
谢谢!
注意:这些文件永远不会被删除。他们错过了一些必须出错的事情,但这种情况每周发生几次。此外,我想检查文件存在的原因是因为我可以返回磁盘上的备用资产,所以我希望能够在一个地方拥有该逻辑,而不是处理捕获异常和处理在那种背景下。
答案 0 :(得分:5)
即使您在尝试投放之前检查它是否存在,也可以在支票和服务之间将其删除。
这里的问题是,如果您无法提供文件,则不会发回任何内容。尝试提供不存在的文件应该抛出异常(或者平台上的等效文件) - 您应该通过返回适当的“抱歉,我们找不到您的文件”错误页面来处理该异常。
答案 1 :(得分:3)
如果文件不存在异常情况(正如您所说db始终是正确的那样),则不应检查它。
如果不存在,则会出现异常并相应处理。这似乎是你说系统工作的方式,我会这样处理它。
还有一点需要注意的是,如果你说打开时不存在的文件只是没有返回任何内容,那就告诉我你的异常中存在一个设计缺陷,而你的较低级别并没有将异常冒泡到足够远的地方妥善处理,以便将错误信息传达给客户。
通过适当的异常处理/冒泡,您应该没有问题返回alernate资产。重新思考您的异常处理,而不是重新设计系统的工作方式。
答案 2 :(得分:1)
只要您没有使用某种非常奇怪的存储方案,就不应该遇到任何严重的性能问题。
答案 3 :(得分:1)
我不知道这种方法存在任何重大性能问题,但在打开文件之前检查文件是否存在可能会产生意外结果(另一个进程可以在检查和打开文件之间删除文件)。
答案 4 :(得分:0)
我真的不知道这是一个便宜或昂贵的任务,但是,考虑到不检查文件的存在可能会导致对客户端的不愉快响应,我会说它并不昂贵。
我确实有一些网络应用程序,我检查文件是否存在,并且工作正常。
答案 5 :(得分:0)
您是重定向到文件,还是通过代码阅读并提供文件内容?
如果是第一个,如果由于某种原因文件不存在会发生什么?标准404错误,或者您是否有专门的错误页面?这种情况可以接受吗?
如果是后者,只需打开文件并适当处理异常。
答案 6 :(得分:0)
与数据库或内存中读取相比,文件IO通常成本很高,但是我在听到系统崩溃或未处理的异常时听到过旧的“数据库存储信息所以它不应该出错”太多次。因此,除非您的性能要求异常高,否则我会检查是否存在并优雅地恢复。
答案 7 :(得分:0)
如果没有检查文件导致用户混淆和/或没有给他们所需要的东西,或者至少显示一条错误信息表明问题 - 那么无关紧要成本是多少。
应用程序需要检查。
答案 8 :(得分:0)
表现明智,基本上没有影响。这里缓慢的部分是去磁盘读取文件头,但如果你要加载文件,你必须这样做,任何体面的存储系统(几乎是过去几十年中的任何一个)都将从检查中缓存读取,以便在实际打开文件时,部分读取速度更快。话虽如此,我同意mattlant一般情况下,如果通常预期文件存在,那么通常会更好地捕获没有异常的文件并正确处理它。
答案 9 :(得分:0)
如果你打算立即打开它,那么检查它的存在基本上是 free
答案 10 :(得分:0)
尝试打开文件,然后将其流式传输。这有可能吗?这样,如果您无法打开并流式传输,那么您将无法发送它并可以执行相应的错误处理。