private static unsafe void PassThruUnsortedThread
(
NdisApi filter,
WaitHandle[] waitHandles,
IReadOnlyList<AutoResetEvent> waitHandlesManualResetEvents)
{
const int bufferSize = 32;
var buffers = new IntPtr[bufferSize];
for (int i = 0; i < buffers.Length; i++)
{
buffers[i] = (IntPtr)filter.CreateIntermediateBuffer();
}
while (true)
{
WaitHandle.WaitAny(waitHandles);
uint packetsSuccess = 0;
while (filter.ReadPacketsUnsorted(buffers, bufferSize, ref packetsSuccess))
{
for (int i = 0; i < packetsSuccess; i++)
{
EthernetPacket ethPacket = buffers[i].GetEthernetPacket(filter);
if (ethPacket.PayloadPacket is IPv4Packet iPv4Packet)
{
if (iPv4Packet.PayloadPacket is TcpPacket tcpPacket)
{
//Console.WriteLine($”{iPv4Packet.SourceAddress}:{tcpPacket.SourcePort} -> {iPv4Packet.DestinationAddress}:{tcpPacket.DestinationPort}.”);
}
}
}
if (packetsSuccess > 0)
{
filter.SendPacketsUnsorted(buffers, packetsSuccess, out uint numPacketsSuccess);
}
}
}
}
}
The demo has high CPU usage
c# 调用驱动的时候,16核心cpu 占用16%