- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
合作:
主要关注:线程安全性和可靠性。
该项目由一个封闭系统组成,将由执行各种操作的多种类型的用户使用。在我们当前的项目中,我决定实现一些可能大多数开发人员认为绝对必要的东西。
过去,由于缺乏最简单的日志系统,我们可以跟踪一些常见的用户操作,尤其是操作数据,因此出现了严重的问题。
我知道有流行的日志框架,但我想实现一些不会阻塞主线程的相对简单的东西。
我的想法是在主线程上提取我需要的所有数据,因为事实证明有些数据更难从单独的线程访问,然后创建一个任务来处理数据库插入。我对多线程的了解有限,这就是我想出的。
public static class EventLogger
{
public static void LogEvent(int eventType, string descr, Exception ex = null)
{
//Get the page that is currently being executed;
var executingPage = HttpContext.Current.CurrentHandler as Page;
string sourcePage = executingPage != null ? executingPage.AppRelativeVirtualPath : string.Empty;
var eventToAdd = new Event()
{
Date = DateTime.Now,
EventTypeId = eventType,
isException = ex != null ? true : false,
ExceptionDetails = ex != null ? ex.Message : string.Empty,
Source = sourcePage,
UserId = UserHelper.GetUserGuid(),
UserIP = UserHelper.GetUserIP(),
UserName = UserHelper.GetUserName(),
Description = descr
};
Task.Factory.StartNew(() => LogEventAsync(eventToAdd));
}
private static void LogEventAsync(Event eventToAdd)
{
using (var context = new PlaceholderEntities())
{
context.Events.Add(eventToAdd);
context.SaveChanges();
}
}
}
问题:
最佳答案
是的,在多线程环境下是安全的。因为每次将事件插入数据库时都会创建数据库上下文的新实例,所以您是安全的。只有当您尝试跨线程重用相同的上下文实例时,EF 才不是线程安全的。
唯一可能的问题是以异步方式执行此操作可能意味着同时打开多个连接并且连接池可能会耗尽。您登录的频率越高,发生这种情况的可能性就越大。
话虽如此,我仍然建议您使用 log4net 或任何现有的日志记录基础架构,并找到一种异步记录的方法。人们经常在博客上写如何使用 log4net 执行此操作,例如查看此处
http://www.ben-morris.com/using-asynchronous-log4net-appenders-for-high-performance-logging
请注意,那里也讨论了与异步日志记录相关的问题。要解决一些问题,例如条目排序错误的可能性,您可以在此类自定义 appender 中有一个队列。坚持使用现有框架可以让您重用许多已经开发的想法。当需求发生变化时,迟早要独自行动会让你停滞不前。
关于c# - 这是一种安全且*相对可行*的异步记录某些事件的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22659470/
对于我的一个项目,我终于需要使用我的第一个多态类(std::cout 除外)。 我正在研究如何确保至少在某些情况下我有 100% 的去虚拟化调用。 这段代码是否合法可行? dynamic_cast 有
最近有一个编译问题,用这个片段说明: struct Base { }; template struct A : Base { A(){} A(Base&&) {} }; A foo()
注意:这是一个冗长的问题,需要对 MVVM“设计模式”、JSON 和 jQuery 有很好的理解.... 所以我有一个理论/主张 DHTML 中的 MVVM 是可能的 和可行的 并且想知道您是否同意/
我有一台 Mac 服务器,我正在构建 PHP 代码以允许用户上传图像、文档甚至视频文件。研究这个肯定让我很紧张,我希望上传的内容没有病毒。 自己构建一些东西会是一个巨大的挑战吗?您会这样做,还是会
根据文档,ASP.NET 项目(尚)不支持新的 PackageReference https://learn.microsoft.com/en-us/nuget/consume-packages/pa
我是一名优秀的程序员,十分优秀!