关于LINQ与标准foreach循环,我有一个基于效率的问题.
我有一个方法,大致如下
var foos = users.Select(this.GenerateNullableFoo).Where(foo => foo != null);
Run Code Online (Sandbox Code Playgroud)
事实证明,由于某种原因,这是非常缓慢的.使用时间戳,我能够确定缓慢的点恰好在select的迭代(从最终返回语句到下一个方法调用的开始的时间)比其他任何东西慢得多(13秒)(总时间<= 14秒) ).
当用以下代替时,整个处理时间减少到每次迭代不到1秒.
新代码:
var foos= new List<Foo>();
foreach (var user in users)
{
var foo = GenerateNullableFoo(user);
foo.IfNotNull(f => foos.Add(foo));
}
Run Code Online (Sandbox Code Playgroud)
据我所知,我的代码有效,新代码没有任何问题,但是,我完全不知道为什么使用上面的Select比看似相同的进程慢了10多倍.是否有任何见解可以解释这个差异?
此外,直到所述select/foreach 之后才对整个List进行保存,此时对db进行批量调用.
编辑:从起点到完成(和终止)的整个代码块如下:
//Code snippet pictured above
_repo.SaveFoo(Foos);
//at this point, the code terminates and is finished
Run Code Online (Sandbox Code Playgroud) 在may更新之前(我们使用离线令牌因为它们没有过期),我能够向facebook发送删除请求并在禁用离线访问启用后禁用用户的facebook链接(禁用)旧的功能),这不再有效.我想弄清楚可能有什么变化.目前没有关于这个主题的帖子,我发现的所有帖子在答案上都非常矛盾.
即
VS
Facebook帐户脱钩或取消授权Facebook应用程序,并检查从Facebook应用程序链接的状态
这也记录在图形文档中,说这个命令应该有效,我已经尝试了一些不同的语法(它实际上没有说明在文档中使用哪种语法 - 很棒的工作Facebook,它只是说"发送删除请求").
长话短说,这有用吗?尝试修复此功能时,我不断收到400错误"错误请求".
我尝试了以下两个网址:
https://graph.facebook.com/userId/permissions?access_token=someToken&method=delete https://graph.facebook.com/me/permissions?access_token=someToken&method=delete