Как уменьшить количество операций ввода-вывода файлов в устаревшем приложении, которое пишет на диск, и в приложении, которое читает его в режиме реального времени (.NET) - PullRequest
3 голосов
/ 23 января 2011

В моей ситуации у меня есть устаревшее приложение, у которого нет кода, для которого каждую секунду или около того записываются данные на диск. У меня есть программа на C #, которую я написал, которая каждую секунду читает то, что было записано на диск, и использует данные. Данные записываются в несколько текстовых файлов, которым я знаю имя файла до его создания.

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

Есть ли простой способ сделать файл на диске, который существует в ram или что-то еще? Я слышал что-то о том, что именованные каналы являются опцией?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 января 2011

Вы уверены в действительном IO?

Давным-давно я реализовал очень уродливое соединение, отправляющее данные из программы dos в программу Windows посредством файла. Однако это было намного быстрее, чем раз в секунду - программа dos будет отправлять блок 4k каждый раз, когда на нем что-либо меняется, 50 раз в секунду (если он был захвачен) программа Windows считывает номер кадра и затем читает Блок 4K, если номер кадра отличается.

Это НЕ вызывает дисковый ввод-вывод! Вы можете сидеть там, заставляя программу DOS обновлять кадр много раз в секунду столько, сколько вам нужно, и индикатор жесткого диска будет выключен. Windows увидела, что файл был открыт и часто записывался, буферы НЕ записывались на диск до тех пор, пока не прекратились обновления.

Несмотря на то, что я потратил много времени на оптимизацию ссылки на Windows, все это было связано с тем, что было сделано с данными, а не с соединением - это просто не было узким местом, несмотря на его очевидное уродство.

Возможно, Windows будет обращаться с этим по-другому, если файл будет закрываться каждый раз. Если его прикрепить к виртуальному диску, то даже тогда он не сможет выполнить дисковый ввод-вывод.

0 голосов
/ 23 января 2011

Вы можете искать какую-то память / временные файловые системы.

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

...