You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Log4Net与Entity Framework 6后内存缓慢攀升,求优化方案

CSV拆分工具日志方案优化问题

我开发了一个CSV文件拆分工具,用于处理前置操作文件。由于程序以服务形式部署,我将Log4Net的文件日志追加器替换为数据库存储日志,参考Stack Overflow相关方案实现了无需修改构造函数的版本。

但切换到数据库日志后,程序内存开始缓慢攀升,使用文件日志时则无此问题。想请教是否有更优的Log4Net与Entity Framework配置方式。


SQL日志表创建脚本(可添加至实体.edmx)

CREATE TABLE [dbo].[Log4NetLog](  
    [Id] [int] IDENTITY(1,1) NOT NULL,  
    [Date] [datetime] NOT NULL,  
    [Thread] [varchar](255) NOT NULL,  
    [Level] [varchar](50) NOT NULL,  
    [Logger] [varchar](255) NOT NULL,  
    [Message] [varchar](4000) NOT NULL,  
    [Exception] [varchar](2000) NULL,  
 CONSTRAINT [PK_Log4NetLog] PRIMARY KEY CLUSTERED   
(  
    [Id] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY] 

app.config中的log4net配置段

<log4net>
      <appender name="EFNetAppender" type="CSCFileService.EFNetAppender">
          <bufferSize value="1" />
          <connectionType value="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <connectionStringName value="EDIEntities" />
          <commandText value="INSERT INTO dbo.Log4NetLog ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level,@logger, @message, @exception)" />
          <parameter>
              <parameterName value="@log_date" />
              <dbType value="DateTime" />
              <layout type="log4net.Layout.RawTimeStampLayout" />
          </parameter>
          <parameter>
              <parameterName value="@thread" />
              <dbType value="String" />
              <size value="255" />
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="%thread" />
              </layout>
          </parameter>
          <parameter>
              <parameterName value="@log_level" />
              <dbType value="String" />
              <size value="50" />
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="%level" />
              </layout>
          </parameter>
          <parameter>
              <parameterName value="@logger" />
              <dbType value="String" />
              <size value="255" />
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="%logger" />
              </layout>
          </parameter>
          <parameter>
              <parameterName value="@message" />
              <dbType value="String" />
              <size value="4000" />
              <layout type="log4net.Layout.PatternLayout">
                  <conversionPattern value="%message" />
              </layout>
          </parameter>
          <parameter>
              <parameterName value="@exception" />
              <dbType value="String" />
              <size value="2000" />
              <layout type="log4net.Layout.ExceptionLayout" />
          </parameter>
      </appender>
      <appender name="MyFileAppender" type="log4net.Appender.rollingFileAppender">
          <file value="${ProgramData}\CSCFileService\Log\CSCFileService_"/>
          <datepattern value="yyyyMMdd'_${USERNAME}.log'"/>
          <threshold value="ALL"/>
          <appendToFile value="true"/>
          <maximumFileSize value="1MB"/>
          <MaxSizeRollBackups value="10"/>
          <RollingStyle value="size,date"/>
          <staticLogFileName value="false"/>
          <preserveLogFileNameExtension value="true"/>
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%identity] | %message%newline"/>
          </layout>
      </appender>
    <root>
      <level value="ALL"/>
      <!--<appender-ref ref="MyFileAppender"/>-->
      <appender-ref ref="EFNetAppender"/>
    </root>
  </log4net>

自定义EF连接处理类

using System;
using System.Data;
using System.Data.Entity.Core.EntityClient;
using System.Data.Entity.Infrastructure;

namespace CSCFileService
{
    public class EFNetAppender : log4net.Appender.AdoNetAppender
    {
        protected override IDbConnection CreateConnection(Type connectionType, string connectionString)
        {
            var factory = (IDbConnectionFactory)Activator.CreateInstance(connectionType);
            var builder = new EntityConnectionStringBuilder();
            var providerConnectionString = new EntityConnectionStringBuilder(connectionString).ProviderConnectionString;
            IDbConnection instance = factory.CreateConnection(providerConnectionString);
            instance.ConnectionString = providerConnectionString;
            return instance;
        }
    }
}

内容的提问来源于stack exchange,提问作者robinhood1995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:02:02