powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать быстрее чтение списка файлов?
8 сообщений из 8, страница 1 из 1
Как сделать быстрее чтение списка файлов?
    #39568866
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: взять списко файлов из указанного фолдера и заполнить им таблицу в базе.
Для примера - SQLite.

Делаю так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// выбираю из файловой системы в массив

 string[] array1= Directory.GetFiles(path, @"*.*", includeSubdirs ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);

// пишу из массива в базу
using (var cmd = new SQLiteCommand(_sqlite))
            {
                using (var transaction = _sqlite.BeginTransaction())
                {
                    SQLiteParameter par3 = new SQLiteParameter("@pfilename", DbType.String, 2048);
                    cmd.Parameters.Add(par3);
                    cmd.Prepare();
                    cmd.CommandText = @"INSERT INTO files (filename,hash) SELECT @pfilename,Sha1(@pfilename);";

                    foreach (var fname in array1)
                    {
                        par3.Value = fname;
                        cmd.ExecuteNonQuery();
                    }

                    transaction.Commit();
                }
            }




Но смущает заполнение сначала массива, а потом переливание из массива в базу.
Может можно без промежуточного массива обойтись? И время, и память сэкономится
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39568873
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинМожет можно без промежуточного массива обойтись? И время, и память сэкономится
Что экономить-то? Тогда уж отказывайтесь от Directory.GetFiles это корень зла - породитель массива
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39568880
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserРолг ХупинМожет можно без промежуточного массива обойтись? И время, и память сэкономится
Что экономить-то? Тогда уж отказывайтесь от Directory.GetFiles это корень зла - породитель массива

Чем заменить?

Кстати, да, есть такая еще проблема:
когда даю параметр, например, взять список файлов со всего диска "d:\", то получаю исключение на
"System Volume Information" - нет прав.

Как получить список файлов со всего диска, исключая этот системный фолдер ?
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39568963
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг ХупинНо смущает заполнение сначала массива, а потом переливание из массива в базу.
Может можно без промежуточного массива обойтись? И время, и память сэкономится
С говна сметану собираешь. Накладные расходы на это на порядок-два меньше, чем расходы на вызов одной команды сервера. А этих вызовов - столько же, сколько и файлов.

Лучше подумай, как получить список файлов в самом сервере. Не знаю, как в SQLite, в MS SQL Server можно сделать что-то типа:
Код: sql
1.
SELECT * FROM (execute cmd_exec("dir c:\folder /b")) INTO Table


давно этим не занимался, точный синтаксис не помню, но суть понятна: сервер выполнял команду, данные возвращались в виде списка строк, список строк идёт в таблицу. Всё делается за один вызов.
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39569048
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thРолг ХупинНо смущает заполнение сначала массива, а потом переливание из массива в базу.
Может можно без промежуточного массива обойтись? И время, и память сэкономится
С говна сметану собираешь. Накладные расходы на это на порядок-два меньше, чем расходы на вызов одной команды сервера. А этих вызовов - столько же, сколько и файлов.

Лучше подумай, как получить список файлов в самом сервере. Не знаю, как в SQLite, в MS SQL Server можно сделать что-то типа:
Код: sql
1.
SELECT * FROM (execute cmd_exec("dir c:\folder /b")) INTO Table


давно этим не занимался, точный синтаксис не помню, но суть понятна: сервер выполнял команду, данные возвращались в виде списка строк, список строк идёт в таблицу. Всё делается за один вызов.

В SQLite можно сделать расширение, но он будет в клиенте, так что шило на мыло...
Я потому и долбусь на клиенте, что такие команды не допускаются, например, если сервер в туче.
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39569058
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин, прежде чем чинить слабое место - сначала найди его. Т.е. профильнись.
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39569106
korg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,

Вы выполняете sql запрос для каждого файла, это не рационально,
сформируйте что-то вроде
insert into ...
values( ... ),
( ... ),
( ... )
...
Рейтинг: 0 / 0
Как сделать быстрее чтение списка файлов?
    #39569117
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как сделать быстрее чтение списка файлов?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]