2012-05-17 2 views
1

Мое приложение в настоящее время реализует объект FileSystemWatcher для мониторинга каталога (C: \ Incoming) для создания файла (Input.xml).Самый быстрый способ чтения файла

В настоящее время я использую объект Streamreader для чтения файла в мое приложение, однако меня беспокоит производительность, учитывая, что данные будут использоваться для выполнения операций в базе данных SQL Server.

Что было бы самым быстрым способом прочитать файл в памяти (или я его уже использую)?

+0

Каковы диапазоны размеров файлов? Какой именно код вы используете для чтения этих файлов? –

+2

Вы взаимодействуете с самой медленной частью системы (физический диск). На самом деле нет никакой причины выходить на производительность. Если вам нужно * быстрее, вы можете использовать RAM-диск или SSD для своей папки ввода. – tzerb

+1

Какую роль играет SQL-Server? _ «однако я заинтересован в производительности, учитывая, что данные будут использоваться для выполнения операций в базе данных SQL Server». _ Обратите внимание, что вы можете ** навальный импорт ** в sql-сервер непосредственно из файлов. http://msdn.microsoft.com/en-us/library/ms188365.aspx –

ответ

1

Вы используете стандартный подход к задаче.

Если вам нужно загрузить данные (большие данные, то есть) в базу данных, узкое место будет находиться между вашим кодом и базой данных, если вы не используете метод BULK INSERT, а не вставляете строки один за другим. Детали этого зависят от конкретного сервера базы данных. Это, однако, не имеет значения, если файлы относительно малы, и в этом случае загрузка будет более равномерно распределена. Даже тогда мне было бы безразлично скорость доступа к диску.

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