序列化:
phpRPC, .Net 二进制,soap,xml,.Net Json,Hessian,Burlap,NewtonJson,SilverlightSerializer.
其中 phpRPC Hessian,Burlap,SilverlightSerializer都属于二进制序列化
其余为文本传输。
每次测试包含序列化和反序列化。
最后幸存的是:Binary Hessian Burlap NewtonJson SilverlightSerializer.
综合比较 二进制序列化首选 Binary,如果需要支持Silverlight那么SilverlightSerializer也是不错的选择。
如果需要文本传输,那么 NewtonJson 适合你。
代码是从JavaEye论坛上拿过来修改的。
附代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
using
System;
using System.Collections;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Json;
using System.Xml.Serialization;
using org.phprpc.util;
using Newtonsoft.Json;
using hessiancsharp.io;
using burlapcsharp.io;
using Serialization;
namespace Test {
[Serializable]
class TestClass2
{
public int ID;
public double @double { get ; set ; }
public bool @bool { get ; set ; }
public float @float { get ; set ; }
public double ? @double2 { get ; set ; }
public bool ? @bool2 { get ; set ; }
public float ? @float2 { get ; set ; }
public String UserName { get ; set ; }
public String Password { get ; set ; }
public DateTime Birthday { get ; set ; }
}
[Serializable]
class TestClass {
public IDictionary dictionary { get ; set ; }
public IList list { get ; set ; }
// private int[] array = new int[] { 1, 2, 3 };
// public int[] Array { get { return array; } set { } }
public int ID;
public double @double { get ; set ; }
public bool @bool { get ; set ; }
public float @float { get ; set ; }
public double ? @double2 { get ; set ; }
public bool ? @bool2 { get ; set ; }
public float ? @float2 { get ; set ; }
public String UserName { get ; set ; }
public String Password { get ; set ; }
public DateTime Birthday { get ; set ; }
public TestClass2 TestClass2 { get ; set ; }
}
class Program {
static void RunTest( int time, Object data, String info, String filename) {
GC.Collect();
DateTime start, end;
long size = 0 ;
StringBuilder sb = new StringBuilder();
StringBuilder categories = new StringBuilder();
StringBuilder dataset1 = new StringBuilder();
StringBuilder dataset2 = new StringBuilder();
Stream stream;
object result = null ;
sb.Append( " <chart caption=' " + time + " 次 " + info + " 序列化与反序列化的比较' shownames='1' showvalues='1' decimals='0' formatNumberScale='0' baseFont='Tahama' baseFontSize='12'> " );
categories.Append( " <categories> " );
dataset1.Append( " <dataset seriesName='时间'> " );
dataset2.Append( " <dataset seriesName='空间'> " );
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
System.Console.WriteLine(time + " 次 " + info);
try
{
start = DateTime.Now;
PHPFormatter formator1 = new PHPFormatter();
for ( int i = 0 ; i < time; i ++ )
{
stream = new MemoryStream();
formator1.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator1.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='PHP' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " PHP - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " PHP不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
BinaryFormatter formator2 = new BinaryFormatter();
for ( int i = 0 ; i < time; i ++ )
{
stream = new MemoryStream();
formator2.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator2.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Binary' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Binary - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " Binary不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
SoapFormatter formator3 = new SoapFormatter();
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator3.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator3.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='SOAP' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " SOAP - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " SOAP不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
XmlSerializer formator4 = new XmlSerializer(data.GetType());
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator4.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator4.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='XML' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " XML - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " XML不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
DataContractJsonSerializer formator5 = new DataContractJsonSerializer(data.GetType());
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator5.WriteObject(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator5.ReadObject(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='JSON' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " JSON - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " JSON不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
CHessianOutput formator6o = new CHessianOutput(stream);
formator6o.WriteObject(data);
size = stream.Length;
stream.Position = 0 ;
CHessianInput formator6i = new CHessianInput(stream);
result = formator6i.ReadObject();
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Hessian' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Hessian - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " Hessian不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
CBurlapOutput formator7o = new CBurlapOutput(stream);
formator7o.WriteObject(data);
size = stream.Length;
stream.Position = 0 ;
CBurlapInput formator7i = new CBurlapInput(stream);
result = formator7i.ReadObject();
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Burlap' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Burlap - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " Burlap不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ )
{
string sstream = JsonConvert.SerializeObject(data);
// File.WriteAllText(@"E:\NewtonJS.txt", sstream);
size = sstream.Length;
result = JsonConvert.DeserializeObject(sstream);
}
end = DateTime.Now;
categories.Append( " <category label='NewtonJS' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " NewtonJS - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " NewtonJS不支持! " );
}
try
{
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ )
{
byte [] sstream = SilverlightSerializer.Serialize(data);
// File.WriteAllBytes(@"E:\SilverSeria.txt", sstream);
size = sstream.Length;
result = SilverlightSerializer.Deserialize(sstream);
}
end = DateTime.Now;
categories.Append( " <category label='SilverSeria' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " SilverSeria - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " SilverSeria不支持! " );
}
categories.Append( " </categories> " );
dataset1.Append( " </dataset> " );
dataset2.Append( " </dataset> " );
sb.Append(categories);
sb.Append(dataset1);
sb.Append(dataset2);
sb.Append( " </chart> " );
File.WriteAllText(filename, sb.ToString(), Encoding.Default);
System.Console.WriteLine(result);
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
GC.Collect();
}
static void Main( string [] args) {
RunTest( 10000 , 1234567 , " 对整数1234567 " , " 1.xml " );
RunTest( 10000 , true , " 对布尔值true " , " 2.xml " );
RunTest( 10000 , 1e123, " 对浮点数1e123 " , " 3.xml " );
RunTest( 10000 , 1.2 , " 对浮点数1.2 " , " 4.xml " );
RunTest( 10000 , 1234567890987654321 , " 对UInt64型1234567890987654321 " , " 5.xml " );
RunTest( 10000 , Double.PositiveInfinity, " 对无穷大 " , " 6.xml " );
String s = " PHPRPC - perfect high performance remote procedure call " ;
RunTest( 10000 , s, " 对字符串“ " + s + " ” " , " 7.xml " );
byte [] ba = new byte [ 10000 ];
for ( int i = 0 ; i < 10000 ; i ++ )
{
ba[i] = ( byte )(i % 255 );
}
RunTest( 2000 , ba, " 对10000个元素的字节数组 " , " 8.xml " );
string [] sa = new string [ 100 ];
for ( int i = 0 ; i < 100 ; i ++ )
{
sa[i] = s;
}
RunTest( 2000 , sa, " 对100个相同元素的字符串数组 " , " 9.xml " );
sa = new string [ 100 ];
for ( int i = 0 ; i < 100 ; i ++ )
{
sa[i] = s + i;
}
RunTest( 2000 , sa, " 对100个不同元素的字符串数组 " , " 10.xml " );
Hashtable h = new Hashtable();
for ( int i = 0 ; i < 100 ; i ++ )
{
h[s + i] = s + (i + 100 );
}
RunTest( 2000 , h, " 对索引不同内容不同具有100个字符串元素和字符串索引的 Hashtable " , " 11.xml " );
ArrayList list = new ArrayList();
for ( int i = 0 ; i < 1000 ; i ++ ) {
TestClass tc = new TestClass();
tc.ID = i;
tc.UserName = " PHPRPC " ;
tc.Password = " Hello " ;
tc.Birthday = DateTime.Now;
tc.@float = 0 ;
tc.float2 = 0 ;
TestClass2 tc2 = new TestClass2();
tc2.ID = i;
tc2.UserName = " PHPRPC " ;
tc2.Password = " Hello " ;
tc2.Birthday = DateTime.Now;
tc2.@float = 0 ;
tc2.float2 = 0 ;
tc.TestClass2 = tc2;
try
{
// tc.dictionary = new Hashtable();
tc.dictionary = new Dictionary < string , string > ();
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add( 1 , 1 );
tc.dictionary.Add( 2 , 2 );
tc.dictionary.Add( 3 , 3 );
}
catch { }
try
{
tc.list = new List < int > ();
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 2 );
tc.list.Add( 2 );
tc.list.Add( 2 );
tc.list.Add( 3 );
}
catch { }
list.Add(tc);
}
RunTest( 1 , list, " 对具有1000个自定义类型元素的 ArrayList " , " 12.xml " );
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
System.Console.WriteLine( " ----------------------------------END------------------------------------------- " );
GC.Collect();
Console.ReadLine();
}
}
}
using System.Collections;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Json;
using System.Xml.Serialization;
using org.phprpc.util;
using Newtonsoft.Json;
using hessiancsharp.io;
using burlapcsharp.io;
using Serialization;
namespace Test {
[Serializable]
class TestClass2
{
public int ID;
public double @double { get ; set ; }
public bool @bool { get ; set ; }
public float @float { get ; set ; }
public double ? @double2 { get ; set ; }
public bool ? @bool2 { get ; set ; }
public float ? @float2 { get ; set ; }
public String UserName { get ; set ; }
public String Password { get ; set ; }
public DateTime Birthday { get ; set ; }
}
[Serializable]
class TestClass {
public IDictionary dictionary { get ; set ; }
public IList list { get ; set ; }
// private int[] array = new int[] { 1, 2, 3 };
// public int[] Array { get { return array; } set { } }
public int ID;
public double @double { get ; set ; }
public bool @bool { get ; set ; }
public float @float { get ; set ; }
public double ? @double2 { get ; set ; }
public bool ? @bool2 { get ; set ; }
public float ? @float2 { get ; set ; }
public String UserName { get ; set ; }
public String Password { get ; set ; }
public DateTime Birthday { get ; set ; }
public TestClass2 TestClass2 { get ; set ; }
}
class Program {
static void RunTest( int time, Object data, String info, String filename) {
GC.Collect();
DateTime start, end;
long size = 0 ;
StringBuilder sb = new StringBuilder();
StringBuilder categories = new StringBuilder();
StringBuilder dataset1 = new StringBuilder();
StringBuilder dataset2 = new StringBuilder();
Stream stream;
object result = null ;
sb.Append( " <chart caption=' " + time + " 次 " + info + " 序列化与反序列化的比较' shownames='1' showvalues='1' decimals='0' formatNumberScale='0' baseFont='Tahama' baseFontSize='12'> " );
categories.Append( " <categories> " );
dataset1.Append( " <dataset seriesName='时间'> " );
dataset2.Append( " <dataset seriesName='空间'> " );
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
System.Console.WriteLine(time + " 次 " + info);
try
{
start = DateTime.Now;
PHPFormatter formator1 = new PHPFormatter();
for ( int i = 0 ; i < time; i ++ )
{
stream = new MemoryStream();
formator1.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator1.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='PHP' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " PHP - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " PHP不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
BinaryFormatter formator2 = new BinaryFormatter();
for ( int i = 0 ; i < time; i ++ )
{
stream = new MemoryStream();
formator2.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator2.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Binary' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Binary - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " Binary不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
SoapFormatter formator3 = new SoapFormatter();
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator3.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator3.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='SOAP' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " SOAP - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " SOAP不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
XmlSerializer formator4 = new XmlSerializer(data.GetType());
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator4.Serialize(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator4.Deserialize(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='XML' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " XML - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " XML不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
DataContractJsonSerializer formator5 = new DataContractJsonSerializer(data.GetType());
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
formator5.WriteObject(stream, data);
size = stream.Length;
stream.Position = 0 ;
result = formator5.ReadObject(stream);
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='JSON' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " JSON - " + " \t\t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " JSON不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
CHessianOutput formator6o = new CHessianOutput(stream);
formator6o.WriteObject(data);
size = stream.Length;
stream.Position = 0 ;
CHessianInput formator6i = new CHessianInput(stream);
result = formator6i.ReadObject();
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Hessian' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Hessian - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " Hessian不支持! " );
}
GC.Collect();
try {
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ ) {
stream = new MemoryStream();
CBurlapOutput formator7o = new CBurlapOutput(stream);
formator7o.WriteObject(data);
size = stream.Length;
stream.Position = 0 ;
CBurlapInput formator7i = new CBurlapInput(stream);
result = formator7i.ReadObject();
stream.Close();
}
end = DateTime.Now;
categories.Append( " <category label='Burlap' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " Burlap - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch {
System.Console.WriteLine( " Burlap不支持! " );
}
GC.Collect();
try
{
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ )
{
string sstream = JsonConvert.SerializeObject(data);
// File.WriteAllText(@"E:\NewtonJS.txt", sstream);
size = sstream.Length;
result = JsonConvert.DeserializeObject(sstream);
}
end = DateTime.Now;
categories.Append( " <category label='NewtonJS' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " NewtonJS - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " NewtonJS不支持! " );
}
try
{
start = DateTime.Now;
for ( int i = 0 ; i < time; i ++ )
{
byte [] sstream = SilverlightSerializer.Serialize(data);
// File.WriteAllBytes(@"E:\SilverSeria.txt", sstream);
size = sstream.Length;
result = SilverlightSerializer.Deserialize(sstream);
}
end = DateTime.Now;
categories.Append( " <category label='SilverSeria' /> " );
dataset1.Append( " <set value=' " + ((end.Ticks - start.Ticks) / 10000 ) + " '/> " );
dataset2.Append( " <set value=' " + size + " '/> " );
System.Console.WriteLine( " SilverSeria - " + " \t时间: " + (end.Ticks - start.Ticks) + " \t 长度: " + size);
}
catch
{
System.Console.WriteLine( " SilverSeria不支持! " );
}
categories.Append( " </categories> " );
dataset1.Append( " </dataset> " );
dataset2.Append( " </dataset> " );
sb.Append(categories);
sb.Append(dataset1);
sb.Append(dataset2);
sb.Append( " </chart> " );
File.WriteAllText(filename, sb.ToString(), Encoding.Default);
System.Console.WriteLine(result);
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
GC.Collect();
}
static void Main( string [] args) {
RunTest( 10000 , 1234567 , " 对整数1234567 " , " 1.xml " );
RunTest( 10000 , true , " 对布尔值true " , " 2.xml " );
RunTest( 10000 , 1e123, " 对浮点数1e123 " , " 3.xml " );
RunTest( 10000 , 1.2 , " 对浮点数1.2 " , " 4.xml " );
RunTest( 10000 , 1234567890987654321 , " 对UInt64型1234567890987654321 " , " 5.xml " );
RunTest( 10000 , Double.PositiveInfinity, " 对无穷大 " , " 6.xml " );
String s = " PHPRPC - perfect high performance remote procedure call " ;
RunTest( 10000 , s, " 对字符串“ " + s + " ” " , " 7.xml " );
byte [] ba = new byte [ 10000 ];
for ( int i = 0 ; i < 10000 ; i ++ )
{
ba[i] = ( byte )(i % 255 );
}
RunTest( 2000 , ba, " 对10000个元素的字节数组 " , " 8.xml " );
string [] sa = new string [ 100 ];
for ( int i = 0 ; i < 100 ; i ++ )
{
sa[i] = s;
}
RunTest( 2000 , sa, " 对100个相同元素的字符串数组 " , " 9.xml " );
sa = new string [ 100 ];
for ( int i = 0 ; i < 100 ; i ++ )
{
sa[i] = s + i;
}
RunTest( 2000 , sa, " 对100个不同元素的字符串数组 " , " 10.xml " );
Hashtable h = new Hashtable();
for ( int i = 0 ; i < 100 ; i ++ )
{
h[s + i] = s + (i + 100 );
}
RunTest( 2000 , h, " 对索引不同内容不同具有100个字符串元素和字符串索引的 Hashtable " , " 11.xml " );
ArrayList list = new ArrayList();
for ( int i = 0 ; i < 1000 ; i ++ ) {
TestClass tc = new TestClass();
tc.ID = i;
tc.UserName = " PHPRPC " ;
tc.Password = " Hello " ;
tc.Birthday = DateTime.Now;
tc.@float = 0 ;
tc.float2 = 0 ;
TestClass2 tc2 = new TestClass2();
tc2.ID = i;
tc2.UserName = " PHPRPC " ;
tc2.Password = " Hello " ;
tc2.Birthday = DateTime.Now;
tc2.@float = 0 ;
tc2.float2 = 0 ;
tc.TestClass2 = tc2;
try
{
// tc.dictionary = new Hashtable();
tc.dictionary = new Dictionary < string , string > ();
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add(DateTime.Now.ToString(), DateTime.Now.ToString());
tc.dictionary.Add( 1 , 1 );
tc.dictionary.Add( 2 , 2 );
tc.dictionary.Add( 3 , 3 );
}
catch { }
try
{
tc.list = new List < int > ();
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 1 );
tc.list.Add( 2 );
tc.list.Add( 2 );
tc.list.Add( 2 );
tc.list.Add( 3 );
}
catch { }
list.Add(tc);
}
RunTest( 1 , list, " 对具有1000个自定义类型元素的 ArrayList " , " 12.xml " );
System.Console.WriteLine( " -------------------------------------------------------------------------------- " );
System.Console.WriteLine( " ----------------------------------END------------------------------------------- " );
GC.Collect();
Console.ReadLine();
}
}
}