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

.NET Core/Angular部署IIS后JSON文件读写缓慢问题排查

解决.NET Core/Angular项目IIS部署后JSON文件读写缓慢问题

一、IIS部署核心注意事项

  • 权限配置:确保.NET Core应用池的运行身份(默认ApplicationPoolIdentity或自定义账户)对目标文件目录(如D:\LOG)拥有完整的读写权限。权限不足会导致IO操作阻塞,表现为耗时异常增加。
  • 托管环境要求:必须在IIS服务器上安装.NET Core Hosting Bundle,确保.NET Core运行时与IIS托管模块兼容,避免隐性性能问题。
  • 应用程序池设置:将应用程序池的.NET CLR版本设为无托管代码,因为.NET Core依赖自身跨平台运行时,无需传统CLR支持,避免兼容性冲突。
  • 静态文件托管:Angular静态资源(JS、CSS、HTML等)建议直接通过IIS托管对应目录,或在.NET Core中正确配置静态文件中间件,避免后端进程处理静态请求占用资源。
  • 日志追踪:开启IIS失败请求跟踪(FRT)和.NET Core日志记录,便于定位IO操作或其他环节的性能瓶颈。

二、JSON文件读写缓慢的具体解决方案

1. 优化文件路径与系统限制

  • 避免使用系统根目录下的文件夹存储业务文件,建议将JSON文件放在项目私有目录(如Data子目录),通过IWebHostEnvironment获取路径,减少系统级IO限制:
    // 注入IWebHostEnvironment
    private readonly IWebHostEnvironment _env;
    public YourService(IWebHostEnvironment env) => _env = env;
    
    // 获取安全的文件路径
    string filePath = Path.Combine(_env.ContentRootPath, "Data", "avail.json");
    
  • 检查目标目录是否被杀毒软件(如Windows Defender)的实时保护扫描,将该目录加入杀毒软件排除列表,避免扫描拦截IO操作。

2. 优化IO操作代码

  • 替换同步IO方法为异步方法,避免阻塞ASP.NET Core线程池线程,提升并发场景下的性能:
    // 异步写入
    await File.WriteAllTextAsync(filePath, result);
    // 异步读取
    string data = await File.ReadAllTextAsync(filePath);
    
  • 若文件体积较大,使用FileStream进行分块读写,减少内存占用与IO阻塞时间:
    // 分块读取示例
    using var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    using var reader = new StreamReader(stream);
    string data = await reader.ReadToEndAsync();
    

3. 缓存与IIS性能调优

  • 对不频繁更新的JSON数据使用内存缓存,减少重复IO操作:
    private readonly IMemoryCache _cache;
    public YourService(IMemoryCache cache) => _cache = cache;
    
    public async Task<string> GetCachedJsonData()
    {
        const string cacheKey = "AvailJsonCache";
        if (!_cache.TryGetValue(cacheKey, out string cachedData))
        {
            string filePath = Path.Combine(_env.ContentRootPath, "Data", "avail.json");
            cachedData = await File.ReadAllTextAsync(filePath);
            // 根据数据更新频率设置缓存过期时间
            _cache.Set(cacheKey, cachedData, TimeSpan.FromMinutes(5));
        }
        return cachedData;
    }
    
  • 调整应用程序池的队列长度与最大工作进程数,根据服务器硬件配置合理设置,避免请求排队导致IO等待。

4. 系统磁盘优化

  • 使用资源监视器检查服务器磁盘IO使用率,若磁盘占用接近100%,排查是否有其他进程占用磁盘资源,或更换SSD等高性能存储设备。
  • 关闭Windows索引服务对目标文件目录的索引,避免后台扫描增加IO开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:21:26