Avoiding ArgumentException with a ResxResourceReader
本文关键字:ResxResourceReader with ArgumentException Avoiding | 更新日期: 2023-09-27 17:55:46
我有一个带有ResxResourceReader的ArgumentException。
我知道该文件存在,但是我不知道文件的内容是否合适(它具有.resx扩展名,但内容可能是垃圾或根本没有内容)。
问题是如何在不枚举的情况下检查它是否是正确的资源文件?由于用reader.GetEnumerator()
枚举它会引发异常。
我查看了读者的属性,但没有看到任何允许我这样做的东西。
我可以尝试一下并捕获异常,但如果可能的话,我想避免这种情况。
有什么建议吗?
[编辑] 我想特别避免尝试捕获,因为在捕获时我会对另一个 resx 文件执行相同的操作,如果这也无效......好吧,你明白我的意思。虽然这应该很少发生。
这不是对问题的 100% 答案,但将解决您要求的方法的原因。
如果您担心性能,则有充分的理由使用缓存的 ResourceManager(保存静态实例),它可以尝试在后台异步刷新自身(每 1 分钟左右一次),而不是绑定到每个请求。如果失败,它将每分钟失败一次。如果不失败,所有工作线程将能够访问新资源。
当然,如果业务规则允许,这是这样做的。我应该为每个 Web 请求使用静态缓存资源管理器还是新实例?有关系吗?在 CATCH 中,您可以只使用"回退缓存实例",因此不会发生第二次读取操作。
异步执行繁重操作的想法是要走的路,在为重负载/低资源设计应用程序时 - 尽量保持"主循环"尽可能干净。
除此之外,这取决于您要检查的内容。您当然可以用不同的方式检查文件内容,但是读取物理文件(两次)的 IO 成本将比实际的 TRY/CATCH 贵。在 C# 中使用引发的异常。它会影响性能吗?TRY/CATCH-es 不是免费的,但它们是有原因的,有时您无法避免它们。它们是一个安全网,因此整个应用程序继续运行。