Поддерживается ли WriteFileGather в библиотеке классов .NET - PullRequest
0 голосов
/ 02 августа 2009

Я хотел бы использовать функции перекрывающегося ввода-вывода в приложении .Net, в частности WriteFileGather. Поддерживается ли это через стандартную библиотеку классов?

Бонусные баллы: это работает в моно?

Ответы [ 2 ]

1 голос
/ 02 августа 2009

В .NET BCL нет прямой функции, но есть некоторые классы, которые могут помочь вам с операциями ввода-вывода Windows. 1) Инициализировать экземпляр класса Overlapped.

2) Пакет вызовов с обратным вызовом.

3) Передайте полученный NativeOverlapped (возвращаемое значение Pack) в WriteFileGather .

4) Как я понимаю, ваш обратный вызов должен вызываться в рабочем потоке после завершения операции.

Обязательно прочитайте документы MSDN на WriteFileGather, так как есть некоторые требования, например, данные должны быть выровнены по границе страницы системы (я думаю, 4K на x86-x64, 8K на Itanium) и т. д. и т. д.

0 голосов
/ 02 августа 2009

FileStream Class предоставляет поток вокруг файла, поддерживая синхронные и асинхронные операции чтения и записи. Реализация по умолчанию BeginWrite в потоке вызывает метод Write синхронно, что означает, что Write может блокировать некоторые потоки. Однако экземпляры классов, таких как FileStream и NetworkStream, полностью поддерживают асинхронные операции, если экземпляры были открыты асинхронно. Поэтому вызовы BeginWrite не будут блокироваться в этих потоках. Класс FileStream должен работать точно так же на моно.

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