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

DateTime.Now连续多次返回相同时间 日志写入时间重复问题求助

问题原因

你代码中的dateTime是Usage静态类的静态只读字段,静态类的静态字段只会在类第一次被访问时执行初始化赋值,后续整个应用运行周期内,这个值都不会再更新。所以你每次调用Log方法写入的都是类首次加载时获取的时间,只有应用重启、静态类被重新加载时,时间才会更新,自然就会出现大量重复的时间记录。

另外你代码里的path被定义为静态字段,多线程调用时会存在变量覆盖的线程安全问题,using块包裹的StreamWriter会自动执行释放和文件关闭逻辑,不需要手动调用Close方法。

修复方案

将时间获取逻辑移到Log方法内部,每次写日志时实时读取当前时间即可,优化后的代码如下:

public static class Usage
{
    readonly static string filename = "ScriptUsageLog_";
    readonly static string userName = System.Environment.UserName;
    readonly static string fileExtension = ".txt";

    public static void Log(Document doc, string scriptName, int timeSavings = 0)
    {
        // 每次调用日志方法时实时获取当前时间
        DateTime dateTime = DateTime.Now;
        // 改为局部变量避免多线程冲突
        string path = doc.PathName;
        // 路径拼接推荐用Path.Combine,适配不同系统的路径分隔符规则
        string fullLogPath = Path.Combine(FileLocations.UsageFolder, filename + userName + fileExtension);

        using (StreamWriter fileAppend = File.AppendText(fullLogPath))
        {
            fileAppend.WriteLine($"{dateTime}, {userName}, {scriptName}, {path}, {timeSavings}");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:15:02