title: how to improve perfromance of EventProcessorHost's receiving?
body: <p>I donnt know how to improve performance of EventHub's receiving.Now,i am using eventprocessorHost to receive data and the code is almost the demo of eventhub document,i have set options.MaxBatchSize to improve that,but it cannot meet performance .
  So,i wonder to know if there is other api of eventhub that can enhance performance ?</p>
  
  <pre class="lang-cpp prettyprint-override"><code>namespace RecieveFrom
  {    
      class Program
      {
          static void Main(string[] args)
          {
              MainAsync(args).GetAwaiter().GetResult();
          }
          private static async Task MainAsync(string[] args)
          {
              Console.WriteLine("Registering EventProcessor...");
              string _guid = Guid.NewGuid().ToString();
              string eventProcessorHostName = _guid;//lease id
              string leasename = eventProcessorHostName = _guid;//lease id
              var eventProcessorHost = new EventProcessorHost(
                  eventProcessorHostName,
                  EventHubName,
                  PartitionReceiver.DefaultConsumerGroupName,
                  EventHubConnectionString,
                  StorageConnectionString,
                  leasename);
              //options 
              var options = new EventProcessorOptions
              {
                  InitialOffsetProvider = (partitonId) =&gt; EventPosition.FromEnqueuedTime(DateTime.UtcNow - new TimeSpan(0, 2, 0))
              };
              options.MaxBatchSize = 10000;
              options.PrefetchCount = 3000;
           eventProcessorHost.RegisterEventProcessorAsync&lt;SimpleEventProcessor&gt;(options);
              Console.WriteLine("Receiving. Press ENTER to stop worker.");
              Console.ReadLine();
  // Disposes of the Event Processor Host
              await eventProcessorHost.UnregisterEventProcessorAsync();
          }
  //class for data rec
          public class SimpleEventProcessor : IEventProcessor
          {
              public Task CloseAsync(PartitionContext context, Microsoft.Azure.EventHubs.Processor.CloseReason reason)
              {
                  Console.WriteLine($"Processor Shutting Down. Partition '{context.PartitionId}', Reason: '{reason}'.");
                  return Task.CompletedTask;
              }
             public Task OpenAsync(PartitionContext context)
              {
                  Console.WriteLine($"SimpleEventProcessor initialized. Partition: '{context.PartitionId}'");
                  return Task.CompletedTask;
              }
             public Task ProcessErrorAsync(PartitionContext context, Exception error)
              {
                  Console.WriteLine($"Error on Partition: {context.PartitionId}, Error: {error.Message}");
                  return Task.CompletedTask;
              }
  //process data
              public Task ProcessEventsAsync(PartitionContext context, IEnumerable&lt;EventData&gt; messages)
              {
                  foreach (var eventData in messages)
                  {
                      //get data 
                      var data = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
                  }
              }
          }
      }
  }```
  
  I expect the performance to be 100,000 rows/min.
  
  </code></pre>