我有一个.NET 3.5 Web应用程序,它允许用户生成各种自定义数据集的PDF报告。报告是使用JSON在单独的报告生成器服务器(也是.NET WCF服务)上通过Web服务调用生成的。 Web应用程序将报告的二进制数据本地缓存在MySQL数据库中一段可配置的临时时间,因此如果再次请求相同的报告,则从本地缓存提供该报告。生成的报告响应的WCF合同如下:
[DataContract]
public class GetReportBase64EncodedReply
{
[DataMember]
public string Base64EncodedFile { get; set; }
[DataMember]
public string Md5 { get; set; }
[DataMember]
public string Filename { get; set; }
[DataMember]
public int Size { get; set; }
[DataMember]
public int Status { get; set; }
}
在接收端(Web应用程序),报告作为Base64编码字符串作为上述合同收到,并按如下方式处理:
GetReportBase64EncodedReply reportResult = (GetReportBase64EncodedReply)serviceResponse.Data;
byte[] bytes = Convert.FromBase64String(reportResult.Base64EncodedFile);
var expiryDate = DateTime.UtcNow.AddDays(180);
var cachedReport = new LocalDbStorageAction.Insert(bytes, expiryDate);
在尝试将二进制数据插入本地数据库时,它已经运行了一段时间,现在在最后一行抛出系统内存异常。也无法在开发中重现这一点。我正在考虑以下内容,但需要一些指导:
更改1和/或2的内存使用情况有何不同? 有没有办法做一个连续的SQL INSERT(类似于顺序读取,即GetBytes()和GetChars()),如果是这样,那么这里推荐?