我试图ErrorStore在C#中使用StackExchange.Exceptional 快速加载最新的异常.
有没有什么方法可以获得自最近一个日期以来的所有异常,而无需加载和排序所有异常?我怎样才能加快我的代码速度?
我当前的代码获得了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);
Run Code Online (Sandbox Code Playgroud)
这是文档ErrorStore.
由于您的第三行代码,您的代码可能很慢
applications.ForEach(app => ErrorStore.Default.GetAll(errors, app));
Run Code Online (Sandbox Code Playgroud)
这是 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;
}
Run Code Online (Sandbox Code Playgroud)
这是一个实现 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;
}
Run Code Online (Sandbox Code Playgroud)
sql查询GetAllErrors将选择所有异常,而不仅仅是前100个.假设每个应用程序有两个总异常,并且有两个应用程序.因此,您的第三行代码必须及时运行f(n) = 2n.
为了加速你的程序,你可以编写一个类似的方法GetAllErrors,但修改sql查询只从错误数据库中选择100个异常,所以即使有十亿个例外,代码也会在找到匹配的前100个后完成.
您还可以移动代码以搜索sql的所有应用程序名称,这样您就不需要再次按创建日期进行排序.
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |