Асинхронный файл IO в .NET

Если вы используете Babel , то поддержка unicode уже доступна.

Я также выпустил плагин, который преобразует ваш исходный код, чтобы вы могли пишите регулярные выражения типа /^\p{L}+$/. Затем они преобразуются во что-то, что понимают браузеры.

Вот страница проекта плагина: https://github.com/danielberndt/babel-plugin-utf-8-regex

7
задан Shog9 21 June 2009 в 22:04
поделиться

4 ответа

То, что мы сделали, должно было записать небольшой слой вокруг портов завершения ввода-вывода, ReadFile и состояния GetQueuedCompletion в C++ / CLI, и затем перезвонить в C# когда завершенная операция. Мы предпочли этот маршрут BeginRead, и c# асинхронный операционный шаблон для обеспечения большего количества управления буферами раньше читал из файла (или сокет). Это было довольно большим увеличением производительности по чисто управляемому подходу, который выделяет новый байт [] на "куче" с каждым чтением.

Плюс, существует намного больше полных примеров C++ использования портов IO Completion в межсетях

3
ответ дан 7 December 2019 в 03:23
поделиться

Я не уверен, что вижу, почему опция 1 не работала бы на Вас. Следует иметь в виду, что у Вас не может быть двух различных потоков, пытающихся использовать тот же FileStream одновременно - выполнение так определенно вызовет Вас проблемы. BeginRead/EndRead предназначен, чтобы позволить Вашему коду продолжить выполняться, в то время как потенциально дорогая операция IO занимает места, для не включения своего рода многопоточного доступа к файлу.

Таким образом, я предложил бы, чтобы Вы искали и затем сделали beginread.

5
ответ дан 7 December 2019 в 03:23
поделиться

Что, если Вы загрузили ресурс (данные файла или безотносительно) в память сначала и затем совместно использовали его через потоки? Так как это - маленький дб. - Вы не будете иметь как много проблем для контакта с.

1
ответ дан 7 December 2019 в 03:23
поделиться

Используйте подход № 1, но

  1. Когда запрос войдет, возьмите блокировку A. Используйте его для защиты очереди незаконченных запросов чтения. Добавьте его к очереди и возвратите некоторый новый асинхронный результат. Если это приводит к первому дополнению к очереди, назовите шаг 2 перед возвратом. Блокировка выпуска перед возвратом.

  2. Когда чтение завершится (или названный шагом 1), возьмите блокировку A. Используйте его для защиты сования запроса чтения от очереди. Возьмите блокировку B. Используйте его для защиты Seek -> BeginRead -> EndRead последовательность. Блокировка выпуска B. Обновите асинхронный результат, созданный шагом 1 для этой операции чтения. (Так как завершенная операция чтения, назовите это снова.)

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

0
ответ дан 7 December 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: