Я программирую местную потоковую службу.И мне нужно использовать два разных процесса для серверного программного обеспечения (не спрашивайте, почему она).Процесс "child" делает тяжелую работу, и мне нужно получить результаты, но рабочий процесс выполняется в миллисекундах (потому что это сервис потоковых видеоигр).Я пытался с: Process.OutputDataReceived
EventHandler, но результаты много текста, и Консоль занимает много времени для записи.
Также я пытался с FileStream ,Но по логике и исследованиям я знал, что использование MemoryStream
быстрее для хранения и получения данных.Проблема в том, что я не знаю, как получить данные, которые сохраняет процесс child .
Следующий код неплох, но он просто сообщает им, что ятакже попробуйте использовать этот код:
Родительский процесс:
public class MemoryRead
{
Process process = null;
int bufferSize = 256000;
public MemoryRead(Process Process, int BufferSize){
process = Process;
bufferSize = BufferSize;
}
const int PROCESS_WM_READ = 0x0010;
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool ReadProcessMemory(int hProcess,
int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
public string GetString(int BytesAdress = 0x0046A3B8)
{
IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id);
int bytesRead = 0;
byte[] buffer = new byte[bufferSize];
ReadProcessMemory((int)processHandle, BytesAdress, buffer, buffer.Length, ref bytesRead);
return Encoding.UTF8.GetString(buffer);
}
}
Дочерний процесс:
GCHandle handler = GCHandle.Alloc(VideoData, GCHandleType.Pinned);
IntPtr address = handler.AddrOfPinnedObject();
Console.WriteLine((address.ToString()));
Дочерний процесс возвращает int «адрес», и я получаю это с помощью Process.OutputDataReceived
EventHandler для вызова MemoryRead.GetString()
, но это возвращает ноль, в основном, как если бы адрес не существовал.Я просто хочу больше опций, даже если они не имеют ничего общего с MemoryStream
.