流到Base64String - 内存不足异常

时间:2018-01-07 15:17:18

标签: c# casting base-class-library

在返回行Convert.ToBase64String(stream.ToArray())时从以下来源解决“内存不足异常”方面的帮助表示赞赏;

private static string GetSPFileBinary(ClientContext ctx, string fileUrlPath)
    {
        ctx.RequestTimeout = Int32.MaxValue;
        var spFile = ctx.Web.GetFileByServerRelativeUrl(fileUrlPath);
        var spFileContent = spFile.OpenBinaryStream();
        ctx.Load(spFile);
        ctx.ExecuteQuery();
        MemoryStream stream = new MemoryStream();
        if (spFileContent != null && spFileContent.Value != null)
        {
            spFileContent.Value.CopyTo(stream);
        }
        return Convert.ToBase64String(stream.ToArray());
    }

2 个答案:

答案 0 :(得分:0)

假设map.cameraTargetBounds = bounds 已成功执行且stream.ToArray()崩溃,您始终可以将批处理转换为64字符串并将其存储在可以重新加载的位置。然后逐个加载转换后的块并将它们存储到结果文件中。如果您的应用程序在Convert.ToBase64String崩溃,那么您将需要允许您的应用程序使用更多内存(如果可用),或者在从流加载时应用块加载构思。

答案 1 :(得分:0)

即使是下面抛出相同的旧“内存不足异常”,也值得赞赏。

private static string GetSPFileBinary(ClientContext ctx, string fileUrlPath)
    {
        ctx.RequestTimeout = Int32.MaxValue;
        var spFile = ctx.Web.GetFileByServerRelativeUrl(fileUrlPath);
        var spFileContent = spFile.OpenBinaryStream();
        ctx.Load(spFile);
        ctx.ExecuteQuery();
        MemoryStream stream = new MemoryStream();
        if (spFileContent != null && spFileContent.Value != null)
        {
            spFileContent.Value.CopyTo(stream);
        }
         byte[] docBytes = stream.ToArray();            
         return Convert.ToBase64String(docBytes);
    }