直接从流压缩

use*_*142 6 .net c# asp.net

我有一个简单的应用程序,它从数据库中检索数据集并将其转换为xml文件.然后读入此xml文件并压缩为.gz文件.

这似乎效率很低 - 是否可以跳过写入临时.xml文件并将其读回压缩文件的步骤?我可以自动将文件发送到流,将其直接转换为转换后的xml格式吗?

这是我的代码:

public partial class _Default : System.Web.UI.Page
{
    DataSet dataset = new DataSet();
    string uri = "C:\\tester.xml";
    string compressedfileuri = "C:\\tester.gz";

    protected void Page_Load(object sender, EventArgs e)
    {            
        //get the dataset
        RetrieveData();

        //serialize data to a xml file
        dataset.WriteXml(uri);

        //compress the data
        Compress();
    }

    public void RetrieveData()
    {
        string connString = ConfigurationManager.ConnectionStrings["Platform"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = new SqlCommand("SELECT * FROM expenses.CST_COSTHEADER", conn);
            adapter.Fill(dataset);                
        }
    }

    public void Compress()
    {
        using (FileStream fs = new FileStream(uri, FileMode.Open))
        {
            using (FileStream outFile = File.Create(compressedfileuri))
            {
                using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress))
                {
                    fs.CopyTo(Compress);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

sll*_*sll 0

为什么不使用以下重载并直接写入 ZIp 流?

DataSet.WriteXml 方法(流、XmlWriteMode)

public void WriteXml(
    Stream stream,
    XmlWriteMode mode
)
Run Code Online (Sandbox Code Playgroud)