gpt4 book ai didi

c# - StackExchange.Exceptional 获取所有错误太慢

转载 作者:太空狗 更新时间:2023-10-30 01:03:01 24 4
gpt4 key购买 nike

我正在尝试使用 C# 中 StackExchange.Exceptional 中的 ErrorStore 快速加载最近的异常。

有什么方法可以获取最近日期以来的所有异常,而无需加载和排序所有异常?我怎样才能加快我的代码?

我当前的代码获取了 100 个最近的异常,但是速度很慢。

string[] applications = new[] {loc1, loc2};
var errors = new List<Error>();
applications.ForEach(app => ErrorStore.Default.GetAll(errors, app));
return errors.OrderByDescending(m => m.CreationDate).Take(100);

这是 ErrorStore 的文档.

最佳答案

你的代码可能很慢,因为你的第三行代码

applications.ForEach(app => ErrorStore.Default.GetAll(errors, app));

这是ErrorStore.GetAll

public int GetAll(List<Error> errors, string applicationName = null)
{
if (_isInRetry)
{
errors.AddRange(WriteQueue);
return errors.Count;
}

try { return GetAllErrors(errors, applicationName); }
catch (Exception ex) { BeginRetry(ex); }
return 0;
}

这是 GetAllErrors

的一种实现
protected override int GetAllErrors(List<Error> errors, string applicationName = null)
{
using (var c = GetConnection())
{
errors.AddRange(c.Query<Error>(@"
Select Top (@max) *
From Exceptions
Where DeletionDate Is Null
And ApplicationName = @ApplicationName
Order By CreationDate Desc", new { max = _displayCount, ApplicationName = applicationName.IsNullOrEmptyReturn(ApplicationName) }));
}

return errors.Count;
}

GetAllErrors 中的 sql 查询将选择所有异常,而不仅仅是前 100 个。假设每个应用程序总共有 n 个异常,并且有两个应用程序。因此,您的第三行代码必须在 f(n) = 2n 时间内运行。

为了加速你的程序,你可以写一个类似于GetAllErrors的方法,但是修改sql查询从错误数据库中只选择100个异常,所以即使有十亿个异常,代码将在找到前 100 个匹配项后完成。

您还可以将搜索所有应用程序名称的代码移动到 sql,这样您就不需要再次按创建日期排序。

关于c# - StackExchange.Exceptional 获取所有错误太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com