Added:
trunk/AjileJedi.MemcachedForMonorail/Transcoders/
trunk/AjileJedi.MemcachedForMonorail/Transcoders/FastSerializerTranscoder.cs
Modified:
trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.csproj
trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.nunit
trunk/AjileJedi.MemcachedForMonorail.Tests/MemcachedSessionDictionaryTests.cs
trunk/AjileJedi.MemcachedForMonorail.Tests/Properties/AssemblyInfo.cs
trunk/AjileJedi.MemcachedForMonorail.Tests/Utility.cs
trunk/AjileJedi.MemcachedForMonorail/AjileJedi.MemcachedForMonorail.csproj
trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCacheSessionFactory.cs
trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCachedSession.cs
trunk/AjileJedi.MemcachedForMonorail/Properties/AssemblyInfo.cs
Log:
Testing out a new Transcoder based on the FastSerializer....not as fast...but close
Modified: trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.csproj
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.csproj (original)
+++ trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.csproj Sat Apr 5 15:30:48 2008
@@ -8,7 +8,7 @@
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AjileJedi.MemcachedForMonorail.Tests</RootNamespace>
- <AssemblyName>AjileJedi.MemcachedForMonorail.Tests</AssemblyName>
+ <AssemblyName>AgileJedi.MemcachedForMonorail.Tests</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Modified: trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.nunit
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.nunit (original)
+++ trunk/AjileJedi.MemcachedForMonorail.Tests/AjileJedi.MemcachedForMonorail.Tests.nunit Sat Apr 5 15:30:48 2008
@@ -1,6 +1,6 @@
<NUnitProject>
<Settings activeconfig="Default" />
<Config name="Default" binpathtype="Auto">
- <assembly path="bin\Debug\AjileJedi.MemcachedForMonorail.Tests.dll" />
+ <assembly path="bin\Debug\AgileJedi.MemcachedForMonorail.Tests.dll" />
</Config>
</NUnitProject>
Modified: trunk/AjileJedi.MemcachedForMonorail.Tests/MemcachedSessionDictionaryTests.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail.Tests/MemcachedSessionDictionaryTests.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail.Tests/MemcachedSessionDictionaryTests.cs Sat Apr 5 15:30:48 2008
@@ -2,9 +2,13 @@
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
-using AjileJedi.MemcachedForMonorail.CustomSessionStateExtensions;
+using AgileJedi.MemcachedForMonorail.CustomSessionStateExtensions;
+using Enyim.Caching;
+using AgileJedi.MemcachedForMonorail.Transcoders;
+using Enyim.Reflection;
+using Enyim.Caching.Memcached;
-namespace AjileJedi.MemcachedForMonorail.Tests
+namespace AgileJedi.MemcachedForMonorail.Tests
{
/// <summary>
/// Makes sure this dictionary acts like a session is supposed to act.
@@ -59,7 +63,14 @@
[Test]
public void StoreSerializableObject()
{
- Assert.Fail("Test Not Implemented");
+ TestingObject obj = new TestingObject();
+ obj.SomeString = "This is a test";
+ session.Add("testobject",obj);
+ obj = (TestingObject)session["testobject"];
+
+ Assert.AreEqual("This is a test", obj.SomeString);
+
+
}
[Test]
@@ -107,6 +118,133 @@
Assert.IsNull(session["nonexistentkey"]);
}
+
+ [Test]
+ public void WhichTranscoderIsBest()
+ {
+ StoreThisType(typeof(TestingObject));
+
+ StoreThisType(typeof(string));
+
+
+
+ }
+ private static void StoreThisType(Type testtype)
+ {
+ Enyim.Caching.Configuration.MemcachedClientConfiguration config = new Enyim.Caching.Configuration.MemcachedClientConfiguration();
+ config.Transcoder = typeof(FastSerializerTranscoder);
+ config.Servers.Add(new System.Net.IPEndPoint(System.Net.IPAddress.Parse("127.0.0.1"), 11211));
+ config.SocketPool.MinPoolSize = 10;
+ config.SocketPool.MaxPoolSize = 100;
+ int repeatFor = 100000;
+
+ Console.WriteLine("Start Storing {0} instances of {1}........", repeatFor.ToString(), testtype.ToString());
+
+
+ MemcachedClient client;
+ client = new MemcachedClient(config);
+ long start = DateTime.Now.Ticks;
+
+
+ for (int i = 0; i < repeatFor; i++)
+ {
+ object obj;
+
+ switch (Type.GetTypeCode( testtype))
+ {
+ case TypeCode.String:
+ obj = Guid.NewGuid().ToString();
+ break;
+ default:
+ obj = FastActivator.CreateInstance(testtype);
+ break;
+ }
+
+ client.Store(StoreMode.Add, "test" + i.ToString(), obj);
+
+ }
+ double fastSerializeTicks = TimeSpan.FromTicks(DateTime.Now.Ticks - start).TotalSeconds;
+ Console.Write(fastSerializeTicks);
+ Console.Write(" seconds for FastSerializer");
+ Console.WriteLine();
+
+ config.Transcoder = typeof(DefaultTranscoder);
+
+ client = new MemcachedClient(config);
+ start = DateTime.Now.Ticks;
+ for (int i = 0; i < repeatFor; i++)
+ {
+ object obj;
+
+ switch (Type.GetTypeCode(testtype))
+ {
+ case TypeCode.String:
+ obj = Guid.NewGuid().ToString();
+ break;
+ default:
+ obj = FastActivator.CreateInstance(testtype);
+ break;
+ }
+ client.Store(StoreMode.Add, "test" + i.ToString(), obj);
+
+ }
+ double defaultSerializeTicks = TimeSpan.FromTicks(DateTime.Now.Ticks - start).TotalSeconds;
+ Console.Write(defaultSerializeTicks);
+ Console.Write(" seconds for defaultSerialize");
+ Console.WriteLine();
+ client.FlushAll();
+ }
+
+ }
+[Serializable]
+ public class TestingObject
+ {
+
+ public TestingObject()
+ {
+ this._SomeDate = DateTime.Now;
+ this._SomeGuid = Guid.NewGuid();
+ this._SomeHashTable = new System.Collections.Hashtable();
+ this._SomeInt = DateTime.Now.Second;
+ this._SomeString = Guid.NewGuid().ToString();
+
+ }
+
+ private Guid _SomeGuid;
+ public Guid SomeGuid
+ {
+ get { return _SomeGuid; }
+ set { _SomeGuid = value; }
+ }
+
+ private string _SomeString;
+ public string SomeString
+ {
+ get { return _SomeString; }
+ set { _SomeString = value; }
+ }
+
+ private System.Collections.Hashtable _SomeHashTable;
+ public System.Collections.Hashtable SomeHashTable
+ {
+ get { return _SomeHashTable; }
+ set { _SomeHashTable = value; }
+ }
+
+ private DateTime _SomeDate;
+ public DateTime SomeDate
+ {
+ get { return _SomeDate; }
+ set { _SomeDate = value; }
+ }
+
+ private int _SomeInt;
+ public int SomeInt
+ {
+ get { return _SomeInt; }
+ set { _SomeInt = value; }
+ }
+
}
}
Modified: trunk/AjileJedi.MemcachedForMonorail.Tests/Properties/AssemblyInfo.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail.Tests/Properties/AssemblyInfo.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail.Tests/Properties/AssemblyInfo.cs Sat Apr 5 15:30:48 2008
@@ -5,11 +5,11 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("AjileJedi.MemcachedForMonorail.Tests")]
+[assembly: AssemblyTitle("AgileJedi.MemcachedForMonorail.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("AjileJedi.MemcachedForMonorail.Tests")]
+[assembly: AssemblyProduct("AgileJedi.MemcachedForMonorail.Tests")]
[assembly: AssemblyCopyright("Copyright © 2008")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Modified: trunk/AjileJedi.MemcachedForMonorail.Tests/Utility.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail.Tests/Utility.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail.Tests/Utility.cs Sat Apr 5 15:30:48 2008
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Text;
-namespace AjileJedi.MemcachedForMonorail.Tests
+namespace AgileJedi.MemcachedForMonorail.Tests
{
class Utility
{
Modified: trunk/AjileJedi.MemcachedForMonorail/AjileJedi.MemcachedForMonorail.csproj
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail/AjileJedi.MemcachedForMonorail.csproj (original)
+++ trunk/AjileJedi.MemcachedForMonorail/AjileJedi.MemcachedForMonorail.csproj Sat Apr 5 15:30:48 2008
@@ -8,7 +8,7 @@
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AjileJedi.MemcachedForMonorail</RootNamespace>
- <AssemblyName>AjileJedi.MemcachedForMonorail</AssemblyName>
+ <AssemblyName>AgileJedi.MemcachedForMonorail</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -46,6 +46,13 @@
<Compile Include="CustomSessionState\MemCacheSessionFactory.cs" />
<Compile Include="CustomSessionState\MemCachedSession.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Transcoders\FastSerializerTranscoder.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\AgileJedi.Core\AgileJedi.Core.csproj">
+ <Project>{ED098531-C1E6-4565-BBD3-0EFC7398F588}</Project>
+ <Name>AgileJedi.Core</Name>
+ </ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Modified: trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCacheSessionFactory.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCacheSessionFactory.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCacheSessionFactory.cs Sat Apr 5 15:30:48 2008
@@ -7,7 +7,7 @@
using Enyim.Caching.Memcached;
using System.Collections;
-namespace AjileJedi.MemcachedForMonorail.CustomSessionStateExtensions
+namespace AgileJedi.MemcachedForMonorail.CustomSessionStateExtensions
{
public class MemCacheSessionFactory : ICustomSessionFactory
{
Modified: trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCachedSession.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCachedSession.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail/CustomSessionState/MemCachedSession.cs Sat Apr 5 15:30:48 2008
@@ -10,7 +10,7 @@
using System.Collections;
using log4net;
-namespace AjileJedi.MemcachedForMonorail.CustomSessionStateExtensions
+namespace AgileJedi.MemcachedForMonorail.CustomSessionStateExtensions
{
/// <summary>
/// Implements a Specialized Idictionary for use in Monorail Sessions
Modified: trunk/AjileJedi.MemcachedForMonorail/Properties/AssemblyInfo.cs
==============================================================================
--- trunk/AjileJedi.MemcachedForMonorail/Properties/AssemblyInfo.cs (original)
+++ trunk/AjileJedi.MemcachedForMonorail/Properties/AssemblyInfo.cs Sat Apr 5 15:30:48 2008
@@ -6,11 +6,11 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-[assembly: AssemblyTitle("AjileJedi.MemcachedForMonorail")]
+[assembly: AssemblyTitle("AgileJedi.MemcachedForMonorail")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("AgileJedi")]
-[assembly: AssemblyProduct("AjileJedi.MemcachedForMonorail")]
+[assembly: AssemblyProduct("AgileJedi.MemcachedForMonorail")]
[assembly: AssemblyCopyright("Copyright © 2008")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
Added: trunk/AjileJedi.MemcachedForMonorail/Transcoders/FastSerializerTranscoder.cs
==============================================================================
--- (empty file)
+++ trunk/AjileJedi.MemcachedForMonorail/Transcoders/FastSerializerTranscoder.cs Sat Apr 5 15:30:48 2008
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Enyim.Caching.Memcached;
+using AgileJedi.Core.Serialization;
+
+namespace AgileJedi.MemcachedForMonorail.Transcoders
+{
+ public class FastSerializerTranscoder : ITranscoder
+ {
+ #region ITranscoder Members
+
+ public object Deserialize(CacheItem item)
+ {
+ SerializationReader reader = new SerializationReader(item.Data.Array);
+ object returnObject = reader.ReadObject();
+ return returnObject;
+ }
+
+ public CacheItem Serialize(object o)
+ {
+ CacheItem cacheitem = new CacheItem();
+ SerializationWriter writer = new SerializationWriter();
+
+ writer.OptimizeForSize = false;
+ writer.WriteObject(o);
+
+ cacheitem.Data = new ArraySegment<byte>(writer.ToArray());
+
+ return cacheitem;
+
+ }
+
+ #endregion
+ }
+}