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
相关产品推荐
相关产品推荐

