Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.IO;
- using System.ServiceModel;
- using System.Text;
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- namespace ConsoleApplication1 {
- internal class Program {
- private static void Main(string[] args) {
- var host = new ServiceHost(new RemoteTransformer());
- var binding = new NetNamedPipeBinding {
- MaxBufferPoolSize = 1024*1024,
- MaxBufferSize = 1024*1024,
- MaxReceivedMessageSize = 1024*1024
- };
- host.AddServiceEndpoint(typeof (IRemoteTransformer), binding, "net.pipe://localhost/TestService");
- host.Open();
- var t = ChannelFactory<IRemoteTransformer>.CreateChannel(binding,
- new EndpointAddress("net.pipe://localhost/TestService"));
- var startNew = Stopwatch.StartNew();
- var batch = new StringBuilder();
- var sw = new StringWriter(batch);
- var writer = new JsonTextWriter(sw);
- writer.WriteStartArray();
- for (var i = 0; i < 100000; i++) {
- var jobj = new JObject(new JProperty("Hello", "There"));
- jobj.WriteTo(writer);
- if (i%200 == 0) {
- writer.WriteEndArray();
- writer.Flush();
- t.TransformBatch(new MemoryStream(Encoding.Default.GetBytes(batch.ToString())));
- batch.Clear();
- writer.WriteStartArray();
- }
- }
- if (batch.Length > 0) {
- writer.WriteEndArray();
- writer.Flush();
- t.TransformBatch(new MemoryStream(Encoding.Default.GetBytes(batch.ToString())));
- }
- Console.WriteLine(startNew.ElapsedMilliseconds);
- Console.ReadLine();
- }
- }
- [ServiceContract]
- public interface IRemoteTransformer {
- [OperationContract]
- byte[] TransformBatch(Stream objects);
- [OperationContract]
- JObject Transform(JObject obj);
- }
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
- public class RemoteTransformer : IRemoteTransformer {
- private readonly Transformer transfomer = new Transformer();
- #region IRemoteTransformer Members
- public byte[] TransformBatch(Stream objects) {
- var result = new MemoryStream(1024);
- using (var sw = new StreamWriter(result))
- using (var writer = new JsonTextWriter(sw))
- using (var sr = new StreamReader(objects))
- using (var reader = new JsonTextReader(sr)) {
- reader.Read();
- writer.WriteStartArray();
- while (reader.Read() && reader.TokenType == JsonToken.StartObject) {
- var jobj = JObject.Load(reader);
- this.transfomer.Transform(jobj);
- jobj.WriteTo(writer);
- }
- writer.WriteEndArray();
- }
- return result.GetBuffer();
- }
- public JObject Transform(JObject obj) {
- return this.transfomer.Transform(obj);
- }
- #endregion
- }
- public class Transformer {
- public JObject Transform(JObject obj) {
- obj["Modified"] = new JValue(true);
- return obj;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement