C# 此日期时间优化是否会导致本地化问题?这样会更有效率吗?值得吗?

C# 此日期时间优化是否会导致本地化问题?这样会更有效率吗?值得吗?,c#,.net,optimization,datetime,C#,.net,Optimization,Datetime,我正在更新一个项目,该项目使用以下代码根据日期将文件放置在文件夹中: int month = DateTime.Now.Month; string zero = (month < 10) ? "-0" : "-"; string folder = "Folder" + DateTime.Now.Year.ToString() + zero + month.ToString() + "\\"; if (!Directory.Exists(folder)) { Directory.Cre

我正在更新一个项目,该项目使用以下代码根据日期将文件放置在文件夹中:

int month = DateTime.Now.Month;
string zero = (month < 10) ? "-0" : "-";
string folder = "Folder" + DateTime.Now.Year.ToString() + zero + month.ToString() + "\\";
if (!Directory.Exists(folder))
{
   Directory.CreateDirectory(folder);
}
ArchiveFolder = folder;
//...
DateTime now = DateTime.Now;
int date = now.Day;
string zero = (date < 10) ? "0" : "";
string saveaspath =  zero + date.ToString() + "_" + now.ToLongTimeString() + "_" + name;
#if DOTNET20
foreach (char c in Path.GetInvalidFileNameChars())
#else
foreach (char c in Path.InvalidPathChars)
#endif
   saveaspath = saveaspath.Replace(c, '-'); // substitute - for bad chars
saveaspath = saveaspath.Replace(':', '-');
string originalname = saveaspath;
string ext = ".ext";
saveaspath = Path.Combine(ArchiveFolder, saveaspath + ext);
int count = 1;
while (File.Exists(saveaspath)) // make unique
{
    string num = " (" + count++.ToString() + ")";
    saveaspath = Path.Combine(ArchiveFolder, originalname + num + ext);
}
int month=DateTime.Now.month;
字符串零=(月<10)?"-0" : "-";
string folder=“folder”+DateTime.Now.Year.ToString()+zero+month.ToString()+“\\”;
如果(!Directory.Exists(folder))
{
创建目录(文件夹);
}
ArchiveFolder=文件夹;
//...
DateTime now=DateTime.now;
int date=now.Day;
字符串零=(日期<10)?"0" : "";
字符串saveaspath=zero+date.ToString()+“\u”+now.ToLongTimeString()+“\u”+name;
#如果DOTNET20
foreach(路径.GetInvalidFileNameChars()中的字符c)
#否则
foreach(路径中的字符c.InvalidPathChars)
#恩迪夫
saveaspath=saveaspath.Replace(c,“-”);//代用坏炭
saveaspath=saveaspath.Replace(“:”,“-”);
string originalname=saveaspath;
字符串ext=“.ext”;
saveaspath=Path.Combine(ArchiveFolder,saveaspath+ext);
整数计数=1;
while(File.Exists(saveaspath))//使唯一
{
字符串num=“(“+count++.ToString()+”);
saveaspath=Path.Combine(ArchiveFolder,originalname+num+ext);
}
生成的文件示例:
Folder/2010-06/18\u 2-42-09 PM\u name.ext

这是为每个要创建的文件运行的,由于程序的性质,通常一次运行多个文件

我在考虑用DateTime格式字符串更新连接的DateTimes——我认为这可能比所有这些不同的ToString()等调用更有效;然而,我很紧张,当用户有不同的文化设置时,可能会搞砸。再说一次,当前的代码可能会做一些奇怪的事情——我不知道

那么:我应该使用格式字符串重做代码吗?还是保持原样?这对性能有好处吗?它会依赖于文化吗


(澄清一下:我的问题不是如何使用格式字符串重写它;相反,我关心这样做的后果。)

是的。你应该面对更少,而不是更多,使用格式字符串而不是当前使用的ToString方法调用的使用当前区域性版本时出现本地化问题。

是。您应该面对更少而不是更多,使用格式字符串而不是当前使用的ToString方法调用的“使用当前区域性版本”时会出现本地化问题

我应该使用格式字符串重做代码吗

如果简化为使用格式字符串,它将更加健壮和可维护

还是保持原样

如果不打破现有的行为对你来说非常重要,那么最好还是离开它。另一方面,如果事实证明现有代码中存在bug,那么从头重写它可能是一个很好的机会

这对性能有好处吗

如果您的代码正在写入文件,我几乎不认为创建字符串所花费的时间会成为瓶颈。相比之下,写入文件是一个非常慢的操作

它会依赖于文化吗

设置格式时使用,以避免区域性依赖

我应该使用格式字符串重做代码吗

如果简化为使用格式字符串,它将更加健壮和可维护

还是保持原样

如果不打破现有的行为对你来说非常重要,那么最好还是离开它。另一方面,如果事实证明现有代码中存在bug,那么从头重写它可能是一个很好的机会

这对性能有好处吗

如果您的代码正在写入文件,我几乎不认为创建字符串所花费的时间会成为瓶颈。相比之下,写入文件是一个非常慢的操作

它会依赖于文化吗


格式化时使用,以避免区域性依赖。

非常好。当我看到这段代码时,我第一个想到的就是这个……然后我又开始怀疑自己。谢谢,太好了。当我看到这段代码时,我第一个想到的就是这个……然后我又开始怀疑自己。谢谢。谢谢你的深度回答——回答了我所有的问题!听起来不错。谢谢你的深度回答——回答了我所有的问题!听起来不错。