序列化花费了太多时间

时间:2014-01-06 10:55:07

标签: c# .net serialization deserialization binaryformatter

以下是序列化需要大约3到8秒的代码取决于对象类型。我想将此结果存储到Redis中进行缓存。但这项行动耗时太长。反序列化也是一样。

public byte[] SerializeObject(object objectToSerialize)
{
    try
    {
        //If object to serialize is null then return null
        if (objectToSerialize == null)
            return null;

        byte[] result;
        //Create memory stream and use it for Serializing object
        using (var ms = new MemoryStream())
        {
            using (var zs = new GZipStream(ms, CompressionMode.Compress, true))
            {
                var bf = new BinaryFormatter();
                bf.Serialize(zs, objectToSerialize);
            }
            result = ms.ToArray();
        }
        return result;
    }
    catch (Exception ex)
    {
        //Some code
        return null;
    }
}

更新:我如何尝试序列化DataTable

using(var client = m_oRedisClientsManager.GetClient()) {
    //Serialize DataTable to byte
    byteCachedDatatable = m_oSerializer.SerializeDataTable(oCacheObject);

    //add Serialized bytes to redis and update expiration time
    client.Set(sCacheKey, byteCachedDatatable, new TimeSpan(0, iExpiryTimeInMins, 0));
}

public byte[] SerializeDataTable(DataTable dataTable) {
    if (dataTable == null) return null;
    byte[] result;
    using(var memoryStream = new MemoryStream()) {
        using(var deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress)) {
            dataTable.WriteXml(deflateStream, XmlWriteMode.WriteSchema);
            deflateStream.Flush();
            deflateStream.Close();
            result = memoryStream.ToArray();
        }
    }
    return result;
}

任何指针都会有所帮助。

0 个答案:

没有答案