![]() |
1
1
选项3可能会让人觉得难看,但这看起来类似于Visual Studio Watch Windows使用的方法,我会选择这种方法。 在Visual Studio中,通常可以在某个列表或集合上设置监视,稍后注意,当监视由于用户或代码状态更改而无法计算某个值时,它只会显示一个异常。 这是处理这种开放式的可能性范围时最有力的方法。事实是,如果监视代码被设计为尽可能支持多个场景,那么您将无法提前考虑所有场景。更好地处理和呈现异常是下一个最佳方法。 顺便说一下,有人提到锁定您的数据结构会起作用。如果“其他代码”也不使用锁进行同步,则不是这样。实际上,这两段代码都必须锁定 相同的 同步对象,如果不控制其他代码,则不太可能。(我认为你在问题中提到了这一点,所以我同意。) |
![]() |
2
4
您要使被监视的代码保持“透明”的唯一方法是使监视代码在状态变化时保持健壮。 一些建议
|
![]() |
3
1
虽然我喜欢Bevan为本地读访问复制列表的想法,但是如果列表特别大,这可能不是一个真正可行的选择。 如果您真的需要无缝、透明、并发地访问这些列表,您应该研究.NET库的并行扩展。它目前作为CTP可用于.NET 2.0到3.5。扩展将与一些附加集合一起正式包含在.NET 4.0中。我认为您会对来自CTP的blockingcollection感兴趣,它将为您提供所需的透明并发访问。显然,与涉及同步的任何线程内容一样,性能也会受到影响,但是这些集合已经得到了相当好的优化。 |
![]() |
4
1
正如我所理解的,您不希望对被监视的代码有任何依赖性/需求,也不希望对代码的编写方式实施任何约束。 虽然这是我最喜欢的代码“观察者”方法,但这会使您的应用程序面临非常广泛的代码和行为,从而导致它崩溃。 所以,正如我之前所说,我的建议是在第一步让观察者“健壮”。您应该为代码中任何地方出错做好准备,因为考虑到“透明性”,许多事情都可能出错!(请注意将您的Try/Catch放在何处,多次进出Try块可能会对性能产生明显影响) 当您完成了使代码健壮的工作后,接下来的步骤将是使它更可用,并避免出现可能导致异常的情况,比如您提到的“列表”之类的情况。例如,您可以检查被监视的对象,看看它是否是一个列表,而且不太长,首先快速复制它,然后再执行其余操作。这样就消除了大量可能导致代码抛出的可能性。 |
![]() |
5
0
锁定列表会起作用,因为它 是 正在修改,正如您通过崩溃所观察到的那样:) 不过,在我看来,我应该避免锁定(因为看起来您的线程只是“观察者”,不应该真正中断)。 在此基础上,我将尝试处理您确定丢失的情况。这不可能吗? |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
![]() |
Gabe Tucker · 无法在golang中分配接口对象指针 2 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 7 年前 |
![]() |
Randall Flagg · 访问propertyinfo中的属性 7 年前 |
![]() |
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 7 年前 |
![]() |
tobeypeters · 反射铸造 7 年前 |
![]() |
myst02 · 如何在另一个方法之后调用该方法? 7 年前 |