代码之家  ›  专栏  ›  技术社区  ›  user584018

只有很少的windows服务器才会出现文件锁定奇怪行为的原因是什么

  •  0
  • user584018  · 技术社区  · 3 年前

    我有C#控制台应用程序,它作为windows服务运行,并与 NT Service 账户一旦服务运行数据库文件( sqlite )在用户文件位置内创建

    C:\Users\XXX\AppData\Local\TimeSeries.db

    当我检查时,在其中一个生产服务器中 day 1 同一应用程序exe使用的文件 test.exe 同样 PID 我看到2个条目。我不知道为什么,但事情如预期和数据所示 read/write 是恰当的。

    enter image description here

    之后 few days run 我开始变得 TimeSeries.db 文件锁定问题和 读/写 不起作用,此时 3 具有相同PID的相同服务的条目 1736 .

    问题是为什么它又增加了一个条目,但服务只运行了一个实例,并且由于这个文件锁定发生了。为什么以及如何解决这个问题。

    注意-不是所有生产服务器都有这个问题?在这里,服务器出现的问题是一个具有多核心的大型服务器。

    enter image description here

    密码

    public class LiteContext
    {
        public LiteDatabase Database { get; }
    
        public LiteContext()
        {
            Database = new LiteDatabase("TimeSeries.db");
        }
    }
    
    
      public class LiteDbResultWrite
      {
        private readonly LiteDatabase _liteDb;
    
        public LiteDbResultPacketService(LiteContext liteContext)
        {
            _liteDb = liteContext.Database;
        }
    
        public Task<Guid> Insert(Result result)
        {
            try
            {
                var liteCollection = _liteDb.GetCollection<Result>("Result");
                return Task.FromResult(liteCollection.Insert(result).AsGuid);
            }
            catch (Exception exception)
            {
                return Task.FromResult(new Guid());
            }
    
        }
    }
    

    我想我失踪了 IDisposable 对于 LiteDbResultWrite ? 这是正确的吗?

    0 回复  |  直到 3 年前