Approach and example of serialization functions limitations
Approach to serialization LimitFunction
Class Function implements the interface ISerializable. Therefore, for functions of limited available as SOAP and binary serialization.
It is recommended to use library tools ICSSoft.STORMNET.Tools.XmlTools instead of a direct appeal to System.Runtime.Serialization.Formatters.Soap.SoapFormatter or System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.
In the specified library classes available:
ToolXML- allows to serialize meansSoapFormatter,ToolBinarySerializer- allows to serialize meansBinaryFormatter.
Example comparing binary and SOAP serialization LimitFunction
Binary form serialization is more productive and the rows get shorter.
[TestMethod]
public void FunctionSerializeTst()
{
Serialize(true);
Serialize(false);
}
private void Serialize(bool binary)
{
DateTime start = DateTime.Now;
string fnStr = "";
ExternalLangDef externalLangDef = ExternalLangDef.LanguageDef;
SQLWhereLanguageDef ldef = SQLWhereLanguageDef.LanguageDef;
Function fn = ldef.GetFunction(
ldef.funcAND,
ldef.GetFunction(
ldef.funcEQ, new VariableDef(ldef.StringType,"Parampampam"), "who goes to visit in the morning"
),
ldef.GetFunction(
ldef.funcOR,
ldef.GetFunction(ldef.funcEQ, new VariableDef(ldef.StringType, "Compositepicture"), Environment.UserName),
ldef.GetFunction(ldef.funcIsNull, new VariableDef(ldef.StringType, "Nationair"))
)
);
for (int i = 0; i < 1000; i++)
{
string serializedFn;
if (binary)
{
serializedFn = ToolBinarySerializer.ObjectToString(externalLangDef.FunctionToSimpleStruct(fn));
}
else
{
serializedFn = ToolXML.ObjectToString(externalLangDef.FunctionToSimpleStruct(fn));
}
Assert.IsNotNull(serializedFn);
Function восставшийИзНебытия;
if (binary)
{
восставшийИзНебытия =
externalLangDef.FunctionFromSimpleStruct(ToolBinarySerializer.ObjectFromString(serializedFn));
}
else
{
восставшийИзНебытия = externalLangDef.FunctionFromSimpleStruct(ToolXML.ObjectFromString(serializedFn));
}
Assert.IsNotNull(восставшийИзНебытия);
fnStr = "The length of the serialized string: " + serializedFn.Length + Environment.NewLine
+ serializedFn.Substring(0, 50) + Environment.NewLine + "lf: " + восставшийИзНебытия;
}
Console.WriteLine("Run time " + (DateTime.Now - start).TotalMilliseconds);
}