这个DateTime优化是否会导致本地化问题?会更有效率吗?这值得么?

时间:2010-06-18 19:52:33

标签: 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.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);
}

示例生成的文件: Folder/2010-06/18_2-42-09 PM_name.ext

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

我正在考虑使用DateTime格式字符串更新连接的DateTimes - 我认为这可能比所有这些不同的ToString()等调用更有效;但是,当用户有不同的文化设置时,我会感到紧张。然后,这个当前的代码可能会做一些时髦的事情 - 我不知道。

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

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

2 个答案:

答案 0 :(得分:4)

  

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

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

  

还是保持原样?

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

  

它会对性能有益吗?

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

  

它会依赖文化吗?

格式化时使用CultureInfo.InvariantCulture以避免文化依赖。

答案 1 :(得分:1)

是。使用格式字符串而不是现在使用的ToString方法调用的use-current-culture版本时,您应该面对更少而不是更多的本地化问题。

相关问题