Управление 3000 файлами в папке клиентского ПК для приложения C # WPF - PullRequest
2 голосов
/ 11 февраля 2011

Я хочу создать папку с примерно 3000 файлами на пользовательском ПК для приложения WPF C #. Я беспокоюсь о том, будет ли после того, как я осуществлю, поиск имени файла будет слишком медленным. Может кто-нибудь подсказать, должно ли это работать или есть лучшая альтернатива? По сути, моя главная цель - использовать Clickonce для развертывания приложения на любом пользовательском ПК и запустить его без наложения требований на загрузку приложения базы данных.

Справочная информация: Я создал C # приложение для поиска коррелированных пар из Yahoo Finance . В настоящее время он загружает кавычки на 3000 символов и сохраняет их в базе данных Mysql на ПК пользователя. Я заинтересован в создании новой версии приложения, которая не зависит от базы данных Mysql. Я думаю о сохранении всех кавычек в отдельных файлах в папке на пользовательском ПК. Не уверен, что это хорошая идея, или если есть другие альтернативы, такие как создание базы данных небольших объектов на пользовательском ПК, с использованием некоторой вспомогательной библиотеки классов, которая управляет кешем больших массивов и т. д. было бы идеально.

PS: Это образовательный проект с открытым исходным кодом, поэтому я не могу позволить себе купить коммерческий продукт.

Ответы [ 6 ]

4 голосов
/ 11 февраля 2011

Я бы порекомендовал использовать (как вы сказали, что вы готовы рассмотреть альтернативы файловой системе) Sql Server Compact 4.0 . Это:

  • Легкий
  • Не требует запуска отдельного установщика
  • Для работы не требуется отдельный сервис
  • Подсветка памяти
  • Очень легко кодировать, поскольку вы можете использовать DataTable, DataSet и набор классов SqlConnection / SqlDataAdapter на основе SqlServerCe, которые будут очень знакомы.
  • Free !
  • Хороший кандидат на обновление до Sql Server Express в будущем, если вам нужно.
  • Имеются инструменты (в Webmatrix , и я думаю Visual Studio 2010 SP1), которые позволяют вам манипулировать структурой базы данных без необходимости прибегать к коду.

Вероятно, вы сможете добиться своппинга за очень короткий промежуток времени, поскольку «большую часть» работы можно выполнить, добавив ссылку на SqlServerCe в ваш проект и выполнив поиск и замену «MySql». "для" SqlServerCe ". Это небольшое упрощение, но ненамного! =)

1 голос
/ 11 февраля 2011

Как насчет использования SQLite ?Вам не нужно устанавливать ничего, кроме вашего программного обеспечения. Вот оболочка для .NET .

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

Вы также можете рассмотреть диск RAM Disk / RAM, если вам действительно нужна производительность и выхранить его в файловой системе.Однако вам также необходимо сохранить его в постоянном хранилище.

0 голосов
/ 11 февраля 2011

Я бы сказал, рассмотрите возможность использования файла XML для хранения 3000 пар данных, а не более 3000 отдельных файлов, и существует множество LINQ to XML, которые вы можете использовать для более быстрого доступа к данным.

0 голосов
/ 11 февраля 2011

3000 файлов будут в порядке, 300 000 файлов, и у вас возникнут проблемы:)

Единственный способ узнать наверняка - это измерить!

Создание папок с 10 файлами нулевой длины, 100 файлов 1000 файлов. , , 10000000.

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

P.s. «Слишком медленно» совершенно субъективно. 10 мс слишком медленно или 10 миль слишком медленно?

Вам нужно решить, что такое "Слишком медленно", и работать оттуда.

P.P.S Тщательно подумайте, прежде чем принимать решение об использовании файловой системы таким образом, есть лучшие альтернативы (как показано в других разделах).

0 голосов
/ 11 февраля 2011

Я бы не советовал в этом случае использовать файловую систему вместо базы данных.Рассматривали ли вы SQL Server Compact Edition или SQLite ?Оба запускаются в процессе, а это означает, что вам не нужно устанавливать сервер базы данных - это часть вашего приложения.И, конечно же, они все еще поддерживают SQL.

0 голосов
/ 11 февраля 2011

Вы можете использовать простую файловую базу данных, такую ​​как SQLite.

http://www.sqlite.org/

Также для него есть драйвер .NET.

http://code.google.com/p/csharp-sqlite/

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