2016-01-06 8 views
3

У нас есть приложение, которое извлекает данные с нескольких аппаратных устройств. Данные каждого устройства должны храниться в другом файле..Net Запись непрерывных данных на диск в разных файлах

В настоящее время у нас есть файл FileStream по файлу и запись, когда поступают данные, и все.

У нас много данных, диск борется с жестким диском (а не SSD), я думаю, потому что вспышка быстрее, но также и потому, что мы не должны постоянно переходить в разные места файла ,

Некоторые показатели для случая по умолчанию: 400 различных источников данных (каждый должен иметь свой собственный файл), и мы получаем ~ 50 КБ/с для каждой информации (так 20 МБ/с). Каждое получение источника данных выполняется одновременно, и в общей сложности мы используем ~ 6% от ЦП.

Есть ли способ организовать флеш на диске, чтобы обеспечить лучший поток?

Мы также рассмотрим улучшение аппаратных средств, но это не совсем тема здесь, так как это хороший способ улучшить чтение/запись

+1

Похоже, вам нужна быстрая запись, и поиск разрешен относительно медленно. Так почему бы не сохранить его в одном файле, а лучше - в базе данных, что позволяет последовательно писать. – CompuChip

+1

Точно. Для этого используйте базу данных. –

+1

Ребята, это не вопрос ... И даже если бы это было так, запись в базу данных не могла быть быстрее, чем запись на диск, накладные расходы на связь, накладные расходы SQL и все служебные данные СУБД. И даже если бы это было быстрее, это даже не вариант, так как у нас так много операций по обслуживанию, которые заставят нас все время зарабатывать. – J4N

ответ

3

для Windows и NTFS обрабатывать несколько одновременных последовательного ввода-вывода потоков на тот же диск очень нерационально , Вероятно, вы страдаете от случайного ввода-вывода. Вам нужно запланировать IO самостоятельно в больших кусках.

Вы также можете увидеть экстремальную фрагментацию. В таких случаях NTFS иногда выделяет каждый N-й сектор каждому из N файлов. Трудно поверить, что в таких сценариях есть плохая NTFS.

Данные буфера для каждого файла, пока у вас не будет 16 МБ. Затем промойте его. Не записывайте одновременно несколько файлов. Таким образом, у вас есть один диск для каждого сегмента 16 МБ, который уменьшает накладные расходы на поиск до нуля.