通常我很清楚像这样的考虑因素是过早的优化。现在我有一些事件处理程序附加在foreach循环中。我想知道由于创建了闭包,这种风格是否容易出现泄漏或内存使用效率低下。这种想法有效吗?
答案 0 :(得分:1)
闭包仅在您的事件处理程序是匿名方法(包括但不限于lambda表达式)时适用。如果是这种情况,您可能会遇到问题。但只要你在适当的时候删除这些事件处理程序就应该没问题。
答案 1 :(得分:0)
如果你在谈论这样的事情:
foreach (var item in items)
{
item.SomeEvent += delegate {
// do something
};
}
然后答案是性能不明显(无论如何在我的Monotouch体验中),因为编译器只是使用与Microsoft C#编译器相同的方法创建一个类。
我在Monotouch中遇到的最大性能瓶颈是与SQLite相关的,并解析了DateTimes。其他所有内容,包括复杂的LINQ语句都在3GS上飞行 - 我不确定AOT编译器执行了什么魔术,但我只担心它会在0.5秒或更长时间内执行任务。