Вызовет ли эта оптимизация DateTime проблемы с локализацией?Будет ли это более эффективным?Стоит ли оно того? - PullRequest
0 голосов
/ 18 июня 2010

Я работаю над обновлением проекта, в котором для размещения файла в папке на основе даты используется следующий код:

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

Это выполняется для каждого создаваемого файла, обычно много файлов за раз из-за характера программы.

Я думал об обновлении объединенных строк DateTimes со строками формата DateTime--Я подумал, что это может быть более эффективным, чем все эти различные вызовы ToString () и т. Д .;однако я нервничаю, что может облажаться, когда у пользователя другие настройки культуры.Опять же, этот текущий код может сделать что-то необычное - я не знаю.

Итак: Должен ли я переделывать код, используя строки форматирования?Или оставить все как есть?Это пойдет на пользу производительности?Будет ли это зависеть от культуры?

(Чтобы уточнить: мой вопрос не в том, КАК переписать его, используя строку формата; скорее, я обеспокоен последствиями этого.)

Ответы [ 2 ]

4 голосов
/ 18 июня 2010

Должен ли я повторить код, используя строки формата?

Было бы намного надежнее и удобнее в обслуживании, если бы было упрощено использование строк формата.* Или оставить все как есть?

Если для вас очень важно не нарушить существующее поведение, то лучше оставить его.С другой стороны, если выяснится, что в существующем коде есть ошибка, то может быть хорошей возможностью переписать ее с нуля.

Повлияет ли это на производительность?

Если ваш код записывает в файлы, я не думаю, что время, потраченное на создание строк, будет узким местом.Запись в файл является очень медленной операцией по сравнению.

Будет ли это зависеть от культуры?

Использовать CultureInfo.InvariantCulture при форматировании, чтобы избежать зависимости от культуры.

1 голос
/ 18 июня 2010

Да. При использовании строки форматирования вы должны столкнуться с меньшим количеством проблем с локализацией, чем с большим количеством версий, а не с версиями использования текущего метода ToString, которые вы используете сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...