0

我有一个带有 ResxResourceReader 的 ArgumentException。

我知道该文件存在,但是我不知道该文件的内容是否合适(它具有.resx 扩展名,但内容可能是垃圾或根本没有内容)。

问题是如何在不枚举的情况下检查它是否是正确的资源文件?由于枚举它reader.GetEnumerator()会引发异常。

我查看了阅读器的属性,但没有看到任何可以让我这样做的东西。

我可以尝试一下并捕获异常,但如果可能的话我想避免这种情况。

有什么建议么?

[编辑]我想特别避免尝试捕获,因为在捕获时我将对另一个 resx 文件执行相同的操作,如果这也是无效的......那么你明白我的意思。虽然这应该很少发生。

4

1 回答 1

0

这不是问题的 100% 答案,但会解决您所要求的方法的原因。

如果您担心性能,有充分的理由使用缓存的 ResourceManager(保存一个静态实例),它可以尝试在后台异步(每 1 分钟左右)刷新自身,并且不绑定到每个请求。如果失败,它将每分钟失败一次。如果它没有失败,所有工作线程都将能够访问新资源。

这当然是在业务规则允许的情况下。 我应该为每个 Web 请求使用静态缓存的 ResourceManager 还是一个新实例?有关系吗? 在 CATCH 中,您可以只使用“后备缓存实例”,因此不会发生第二次读取操作。

在为重负载/低资源设计应用程序时,异步执行繁重操作的想法是要走的路 - 尽量保持“主循环”尽可能干净。

除此之外,这取决于您要检查的内容。您当然可以用不同的方式检查文件内容,但是读取物理文件(两次)的 IO 成本将比实际的 TRY/CATCH 贵得多。 在 C# 中使用抛出异常。会影响表演吗? TRY/CATCH-es 不是免费的,但它们是有原因的,有时你无法避免它们。它们是一个安全网,因此整个应用程序继续运行。

于 2015-06-12T09:35:06.760 回答