我有一个带有ResxResourceReader的ArgumentException。
我知道该文件存在,但我无法知道该文件的内容是否合适(它有 .resx扩展名,但内容可能是垃圾或根本没有内容。
问题是如何在不枚举的情况下检查它是否是一个合适的资源文件?因为用reader.GetEnumerator()
枚举它会引发异常。
我查看了读者的属性,但没有看到任何可以让我这样做的东西。
我可以尝试一下,只是抓住异常,但我想尽可能避免这种情况。
有什么建议吗?
[编辑] 我想特别避免使用try-catch,因为在catch上我将使用另一个resx文件执行相同操作,如果这是无效的还有......你明白我的意思。虽然这应该很少发生。
答案 0 :(得分:0)
这不是问题的100%答案,但会解决您所要求的方法的原因。
如果你担心性能,有一个很好的理由使用缓存的ResourceManager(持有一个静态实例),它可以尝试异步刷新自己(每1分钟左右)并且不受约束每个请求。如果失败,它将每分钟失败一次。如果它没有失败,所有工作线程都将能够访问新资源。
这当然是业务规则允许的。 Should I use the static cached ResourceManager or a new instance for each web request? Does it matter? 在CATCH中,您可以使用“后备缓存实例”,因此不会发生第二次读取操作。
在设计重负载/低资源的应用程序时,想要以异步方式执行繁重操作的想法是 - 尽量保持“主循环”尽可能干净。
除此之外,这取决于你想要检查的内容。您当然可以通过不同的方式检查文件内容,但读取物理文件(两次)的IO成本将比实际的TRY / CATCH更昂贵。 Using Exceptions throwing in C#. Does it affect a performance? TRY / CATCH-es不是免费的,但它们是有原因的,有时你无法避免它们。它们是安全网,因此整个应用程序继续运行。