【发布时间】:2011-09-29 18:27:32
【问题描述】:
在开始使用开源 MVVM 框架中的一个类后,我开始收到以下异常,该框架使用弱引用来防止内存泄漏。
这个类叫做PropertyObserver,“一种处理其他对象的INotifyPropertyChanged.PropertyChanged事件的标准化方法。这个类使用弱引用和弱事件模式来防止内存泄漏。”
异常的触发器是退出 WPF 应用程序,其中 ShellVm 具有对 MasterVm 的引用,该 MasterVm 具有对多个 DetailVm 的引用,每个 DetailVm 都包含上述 PropertyObserver。 MasterVm 最终是静态 Inflector 类的消费者,该类用于复数和大写 this 和 that,这就是引发 WeakReference 相关异常的地方。
我不能说我完全理解异常,所以我想这就是起点。我将如何着手解决这个问题?
干杯,
浆果
System.InvalidOperationException was unhandled by user code
Message=Handle is not initialized.
Source=mscorlib
StackTrace:
at System.WeakReference.set_Target(Object value)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement, Int32 count, Int32 startat)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement)
at Inflector.Inflector.Rule.Apply(String word)
at Inflector.Inflector.ApplyRules(List`1 rules, String word)
at Inflector.Inflector.Pluralize(String word)
at Smack.Core.Lib.TextUtil.StringEx.Pluralize(String s)
at Smack.Core.Lib.TextUtil.StringEx.PluralizeWithCount[T](String s, IEnumerable`1 collection)
at Smack.Core.Presentation.Wpf.ViewModels.MasterDetailVms.GenericMasterViewModel`2.get_Status()
内部异常:
【问题讨论】:
-
您使用什么版本的 .NET 以及哪个版本使用该框架?
-
@Tigran。我所有的程序集都是 4.0。我将代码复制到现有程序集中,因此没有引用 PropertyObserver 的框架 dll。抛出的 Inflector 代码位于 dll 中,并且可能是旧版本(虽然不确定如何确定)
-
异常实际上是由Regex触发的,它也使用了weak refs。堆栈跟踪非常不完整。嘎嘎声就像库代码中的错误。寻找被不当使用的析构函数。
-
@HansPassant。就是这样,析构函数中的一些日志记录行,其中值为空 - 谢谢!为什么不将其放在答案格式中,以便我可以将其标记为这样?干杯
标签: c# weak-references