|
|
#21 |
|
Участник
|
- Прочитайте про collection initializers в C#
- .NET FW по умолчанию Case sensitive, для того, чтобы строковые функции не учитывали регистр, надо передавать специальный параметр. |
|
|
|
| За это сообщение автора поблагодарили: MazZzDaI (1). | |
|
|
#22 |
|
Участник
|
Спасибо большое за отзыв!
Цитата:
Цитата:
Поиск на моём инстансе занимал 22 сек для каждой метки, для оптимизации перенёс все нужные References в отдельную таблицу путём select * into. Цитата:
![]() Цитата:
Цитата:
Сообщение от mazzy
чтение файла - очень медленная операция. поэтому хотелось бы, чтобы алгоритм был более умным и читал только один раз. могу ошибаться, но мне кажется, что сейчас каждый xml-файл будет читаться столько раз, сколько меток в этом файле найдено перекрестными ссылками (retList - обычный список, который позволяет хранить дубли. в sql нет group by)
Цитата:
Цитата:
Действительно ![]() Цитата:
При подключенной системе контроля версий все изменённые файлы сваливаются в Pending changes, выгребаю оттуда командой "tf status". Цитата:
Сообщение от mazzy
при включенной системе контроля версий, в большинстве случаев у файлов будет включен ReadOnly атрибут.
Цитата:
Цитата:
Последний раз редактировалось MazZzDaI; 13.11.2017 в 13:59. |
|
|
|
|
#23 |
|
Участник
|
еще бы! where like c первым символом '%' - почти гарантированный table scan ))))
Цитата:
а реентерабельность? а параллельная обработка? а разрастание tempDB на ровном месте? значит, для "оптимизации". ладно, молчу-молчу... чтобы задуматься над вопросом, не обязательно входить в группу разработчиков. Цитата:
это человек должен вручную запускать столько раз, сколько моделей он хочет изменить? Цитата:
Все - не хорошее слово. Как только появляется слово "все" - жди логической ошибки. я правильно понимаю, что вы считаете, что в одном сеансе человек будет делать только метки? и человеку действительно улыбается откатить ВСЕ свои изменения из-за "не так" сработавших меток? Цитата:
данная утилита добавит еще несколько десятков, а несколько десятков изменит непредсказуемым для человека образом. ))) Угу-угу. Все. Именно. Кроме того, утилита не выдает(!) список измененных файлов. А только выводит сообщения на консоль. )))) угу-угу. Сваливаются. Я об этом же. Му-ха-ха-ха! Извините. Вы точно не входите в команду разработчиков? У вас ход мыслей очень похож. Думаю, что вы нашли бы общий язык с ними. Можем. пока предпочитаю потрыднеть на форуме. Сблизить подходы, так сказать. прежде всего, лично я считаю, что подобные утилиты лучше делать так, чтобы их можно было добавлять в конвеер обработчиков. поэтому подобные утилиты лучше писать на powershell. ну, или хотя бы использовать stdin, stdout, stderr. Последний раз редактировалось mazzy; 13.11.2017 в 14:41. |
|
|
|
|
#24 |
|
Участник
|
часть обсуждения выделена в отдельную ветку
Этикет CodeReview |
|
|
|
|
#25 |
|
Участник
|
На выходе функции "SearchFiles" будет foundFiles со списком файлов найденных в папке(rootDirectory) и ее подпапках согласно заданному критерию поиска (SearchPattern), за исключением папок и файлов с ошибками доступа. В myLogFile будет записан лог с добавленными файлами для изменений и ошибками доступа.
Код: private List<string> foundFiles = new List<string>();
private void SearchFiles(string myLogFile, string rootDirectory, string SearchPattern) // Search Document at disks by its pattern
{
var Coder = Encoding.GetEncoding(65001);
File.AppendAllText(myLogFile, ";Changing history:\n", Coder);
Stack<string> dirs = new Stack<string>(100);
if (!Directory.Exists(rootDirectory))
{ throw new ArgumentException(); }
dirs.Push(rootDirectory);
while (dirs.Count > 0 )
{
string currentDir = dirs.Pop();
string[] subDirs;
try { subDirs = Directory.GetDirectories(currentDir); }
catch (UnauthorizedAccessException e)
{
File.AppendAllText(myLogFile, "; Wrong Access to the Folder: " + currentDir + " \n", Coder);
continue;
}
catch { continue; }
string[] files = null;
try
{ files = Directory.GetFiles(currentDir); }
catch (UnauthorizedAccessException e)
{
File.AppendAllText(myLogFile, "; Wrong Access to Files in the Folder: " + currentDir + " \n", Coder);
continue;
}
catch { continue; }
foreach (string file in files)
{
try
{
FileInfo fi = new FileInfo(file);
if (fi.FullName.ToString().ToLower().Contains(SearchPattern) == true)
{
File.AppendAllText(myLogFile, fi.FullName + " - add to list\n", Coder);
foundFiles.Add(fi.FullName, Coder);
}
}
catch (FileNotFoundException e)
{
File.AppendAllText(myLogFile, "; The File was deleted" + " \n", Coder);
continue;
}
catch { continue; }
}
foreach (string str in subDirs)
{ dirs.Push(str); }
}
} |
|
|
| Теги |
| ax7, d365, label |
|
|
|