WCF NamedPipeBinding for DB Server

10/20/2014 08:33 Xio.#1
I've implemented a Database Server which basically handles all the IO from the Game and Login server.

If I run it in debug mode I get 1100 ops per second max, on release build I get 2600 ops per second max per channel.

I can spawn 1.5 channels per cpu core until the performance does not increase anymore. So I'm having 12 channels and 32k ops per second on the release build.

Is there a way to further improve the ops?


PHP Code:
public static void CreateDataExchangeInstance()
        {
            var 
DataExchangePipe = new NetNamedPipeBinding ReceiveTimeout TimeSpan.MaxValue };
            
DataExchangeHost = new ServiceHost(typeof(DataExchange), new Uri("net.pipe://localhost"));
            
DataExchangeHost.AddServiceEndpoint(typeof(Interfaces.IDataExchange), DataExchangePipe"DataExchange");
            
DataExchangeHost.Faulted += DataExchangeHostFaulted;
            
DataExchangeHost.Closed += DataExchangeHostClosed;
            
DataExchangeHost.Open();
        } 

for each player, I can get a maximum of 21 ops per second.
10/20/2014 10:50 KraHen#2
Not with this method. These pipes use memory mapped files under the hoods and they are the fastest way for two processes to communicate in WCF. I`d still consider using a socket based approach instead of pipes though, but that depends solely on your circumstances and setup.