私はMonoを試しました-それは1ミリ秒でシリアライザーを作成しますが、.NET4.0では60です。誰かがMonoシリアライザージェネレーターを再利用可能なlibとして移植したのでしょうか?または、移植しようとする場合に使用するモノラルアセンブリの正確なリストを教えてもらえますか?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace serialization
{
[Serializable]
public sealed class UserCredentials1
{
public string Username { get; set; }
public string Password { get; set; }
public override string ToString()
{
return string.Format("Username: {0}, Password: {1}", Username, Password);
}
}
[Serializable]
public sealed class UserCredentials2
{
public string Username { get; set; }
public string Password { get; set; }
public override string ToString()
{
return string.Format("Username: {0}, Password: {1}", Username, Password);
}
}
//.NET 4.0
//native=60.757
//compiled=2.2602
//Username: CTTTOM, Password: WoEIPX6Qqf11j9vKn01bAA==
//MONO:
//mono serialization.exe
//native=0.1589
//compiled=0.1337
//Username: CTTTOM, Password: WoEIPX6Qqf11j9vKn01bAA==
class Program
{
static void Main(string[] args)
{
string xml1 = @" " +
@" CTTTOM" +
@" WoEIPX6Qqf11j9vKn01bAA==" +
@"";
string xml2 = @"" +
@" CTTTOM" +
@" WoEIPX6Qqf11j9vKn01bAA==" +
@"";
//warm up
Type targetType1 = typeof(UserCredentials1);
XmlSerializer nativeSerializer1 = new XmlSerializer(targetType1);
Type targetType2 = typeof(UserCredentials2);
nativeSerializer1.Deserialize(new XmlTextReader(new StringReader(xml1)));
var native = new Stopwatch();
native.Start();
XmlSerializer nativeSerializer2 = new XmlSerializer(targetType2);
native.Stop();
Console.WriteLine("native=" + native.Elapsed.TotalMilliseconds);
var compiled = new Stopwatch();
compiled.Start();
var de = nativeSerializer2.Deserialize(new XmlTextReader(new StringReader(xml2)));
compiled.Stop();
Console.WriteLine("compiled=" + compiled.Elapsed.TotalMilliseconds);
Console.Write(de.ToString());
Console.ReadKey();
}
}
}
編集
移行の最初のステップを実行しました。https://github.com/asd-and-Rizzo/monoを参照してください。「monoserialization.exe」を使用してオブジェクトの汎用リストでテストを実行し、.NETシリアル化と移植されたMonoシリアル化でマウスクリック実行します。移植されたバージョンでは、.NETよりも最大10倍高速なデフォルトのシリアライザーの生成が可能です。
編集
XMLシリアル化構成.NET4.5(http://msdn.microsoft.com/en-us/library/ms229754.aspx)に関してMSDNで見つかりました:
useLegacySerializationGeneration XmlSerializerが、ファイルにC#コードを書き込んでからアセンブリにコンパイルすることにより、アセンブリを生成するレガシーシリアル化生成を使用するかどうかを指定します。デフォルトはfalseです。