|
13.11.2017, 12:22 | #1 |
Участник
|
Цитата:
Сообщение от MazZzDaI
Сделал приложение для замены кодов меток Ax7LabelsReplacer
Критика приветствуется. Пусть будет больше проектов - хороших и разных. Не столько критика, сколько предложения для обсуждения:
Последний раз редактировалось mazzy; 13.11.2017 в 12:40. |
|
|
За это сообщение автора поблагодарили: MazZzDaI (1). |
13.11.2017, 13:55 | #2 |
Участник
|
Спасибо большое за отзыв!
Цитата:
Цитата:
Поиск на моём инстансе занимал 22 сек для каждой метки, для оптимизации перенёс все нужные References в отдельную таблицу путём select * into. Цитата:
Цитата:
Цитата:
Сообщение от mazzy
чтение файла - очень медленная операция. поэтому хотелось бы, чтобы алгоритм был более умным и читал только один раз. могу ошибаться, но мне кажется, что сейчас каждый xml-файл будет читаться столько раз, сколько меток в этом файле найдено перекрестными ссылками (retList - обычный список, который позволяет хранить дубли. в sql нет group by)
Цитата:
Цитата:
Действительно Цитата:
При подключенной системе контроля версий все изменённые файлы сваливаются в Pending changes, выгребаю оттуда командой "tf status". Цитата:
Сообщение от mazzy
при включенной системе контроля версий, в большинстве случаев у файлов будет включен ReadOnly атрибут.
Цитата:
Можем улучшить приложение совместно - кидайте ChangeRequest в GutHub Последний раз редактировалось MazZzDaI; 13.11.2017 в 13:59. |
|
13.11.2017, 14:29 | #3 |
Участник
|
еще бы! where like c первым символом '%' - почти гарантированный table scan ))))
Цитата:
а реентерабельность? а параллельная обработка? а разрастание tempDB на ровном месте? значит, для "оптимизации". ладно, молчу-молчу... чтобы задуматься над вопросом, не обязательно входить в группу разработчиков. Цитата:
это человек должен вручную запускать столько раз, сколько моделей он хочет изменить? Цитата:
Все - не хорошее слово. Как только появляется слово "все" - жди логической ошибки. я правильно понимаю, что вы считаете, что в одном сеансе человек будет делать только метки? и человеку действительно улыбается откатить ВСЕ свои изменения из-за "не так" сработавших меток? Цитата:
данная утилита добавит еще несколько десятков, а несколько десятков изменит непредсказуемым для человека образом. ))) Угу-угу. Все. Именно. Кроме того, утилита не выдает(!) список измененных файлов. А только выводит сообщения на консоль. )))) угу-угу. Сваливаются. Я об этом же. Му-ха-ха-ха! Извините. Вы точно не входите в команду разработчиков? У вас ход мыслей очень похож. Думаю, что вы нашли бы общий язык с ними. Можем. пока предпочитаю потрыднеть на форуме. Сблизить подходы, так сказать. прежде всего, лично я считаю, что подобные утилиты лучше делать так, чтобы их можно было добавлять в конвеер обработчиков. поэтому подобные утилиты лучше писать на powershell. ну, или хотя бы использовать stdin, stdout, stderr. Последний раз редактировалось mazzy; 13.11.2017 в 14:41. |
|
14.11.2017, 12:27 | #4 |
Участник
|
На выходе функции "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 |
|
|