找回密码
 立即注册

QQ登录

只需一步,快速开始

elwin

中级会员

27

主题

210

帖子

748

积分

中级会员

积分
748

活字格认证

elwin
中级会员   /  发表于:2012-10-9 19:59  /   查看:12242  /  回复:16
代码如下

  1. using (MemoryStream ms = new MemoryStream(bytes, true))
  2.                     {
  3.                         try
  4.                         {
  5.                             this.FpSpread1.Open(ms);
  6.                         }
  7.                         catch (System.Exception ex)
  8.                         {
  9.                             Response.Write(string.Format("系统产生一个错误,错误信息如下:{0},请重新加载数据!", ex.Message));
  10.                         }

  11.                     }
复制代码


不是每次都失败,偶尔也能打开成功,很奇怪。

16 个回复

倒序浏览
elwin
中级会员   /  发表于:2012-10-9 20:09:00
沙发
错误提示:
发类型为“System.OutOfMemoryException”的异常。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。]
   System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity) +29
   System.Text.StringBuilder.GetNewString(String currentString, Int32 requiredLength) +69
   System.Text.StringBuilder.Append(String value) +97
   System.IO.StringWriter.Write(String value) +34
   System.Xml.XmlTextWriter.WriteStartAttribute(String prefix, String localName, String ns) +1073
   System.Xml.XmlWriter.WriteAttributeString(String localName, String value) +21
   FarPoint.Web.Spread.NamedStyle.Serialize(XmlTextWriter w) +40

[TargetInvocationException: 调用的目标发生了异常。]
   System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0
   System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +71
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +261
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
   System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) +2090
   System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args) +28
   FarPoint.Web.Spread.Model.Serializer.SerializeObject(Object o, Type saveInterface, String elementName, XmlTextWriter w, Assembly callingAssembly, Object[] args, Boolean saveType) +1409
   FarPoint.Web.Spread.Model.Serializer.SerializeObject(Object o, String elementName, XmlTextWriter w, Assembly callingAssembly) +39
   FarPoint.Web.Spread.NamedStyleCollection.Serialize(XmlTextWriter w) +118

[TargetInvocationException: 调用的目标发生了异常。]
   System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +0
   System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) +71
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +261
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +29
   System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) +2090
   System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args) +28
   FarPoint.Web.Spread.Model.Serializer.SerializeObject(Object o, Type saveInterface, String elementName, XmlTextWriter w, Assembly callingAssembly, Object[] args, Boolean saveType) +1409
   FarPoint.Web.Spread.Model.Serializer.SerializeObject(Object o, String elementName, XmlTextWriter w, Assembly callingAssembly) +39
   FarPoint.Web.Spread.Model.Serializer.GetObjectXml(ISerializeSupport o, String elementName, Assembly callingAssembly) +73
   FarPoint.Web.Spread.FpSpread.SaveViewState() +680
   System.Web.UI.Control.SaveViewStateRecursive() +187
   System.Web.UI.Control.SaveViewStateRecursive() +106
   System.Web.UI.Control.SaveViewStateRecursive() +106
   System.Web.UI.Page.SaveAllState() +168
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099

版本信息: Microsoft .NET Framework 版本:2.0.50727.4016; ASP.NET 版本:2.0.50727.4016
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-10 09:32:00
板凳
回复 1楼elwin的帖子

elwin 你好,
从异常信息上看:是由于 “没有足够的内存继续执行程序时引发的异常。”请问你的 bytes 多大?具体的使用场景是什么呢?
回复 使用道具 举报
elwin
中级会员   /  发表于:2012-10-10 09:43:00
地板
bytes长度是27642852
回复 使用道具 举报
elwin
中级会员   /  发表于:2012-10-10 09:55:00
5#
应用场景:spread保存、读取到数据库的操作!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-10 12:21:00
6#
回复 5楼elwin的帖子

elwin 你好,
不好意思,,没能重现问题。
能否把你的保存和读取流代码发上来看看?
回复 使用道具 举报
elwin
中级会员   /  发表于:2012-10-10 13:35:00
7#
保存代码:
  1. using (System.IO.MemoryStream ms = new MemoryStream()) {
  2.                 if (this.FpSpread1.Save(ms, false))
  3.                 {
  4.                     byte[] bytes = ms.ToArray();

  5.                     if (itableinfo.SaveConfigData(Request["TableID"], bytes))
  6.                     {
  7.                         Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('保存成功!');", true);
  8.                     }
  9.                     else
  10.                     {
  11.                         Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('保存失败!');", true);
  12.                     }
  13.                 }
  14.                 else
  15.                 {
  16.                     Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "alert('保存失败!');", true);
  17.                 }
  18.                
  19.             }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-10 16:38:00
8#
回复 7楼elwin的帖子

elwin 你好,
我使用相同的方式,加载 6888587 byte,没有出现异常。所以推测是文件过大引起的。能否考虑只保留数据

  1. this.FpSpread1.Save(ms, true))
复制代码

在加载数据后重新设置格式呢?
回复 使用道具 举报
elwin
中级会员   /  发表于:2012-10-11 08:54:00
9#
回复 8楼iceman的帖子

格式很重要,肯定要保存。
另外:数据加载后重新设置格式能不能做到跟原来的格式一样啊?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-10-11 09:28:00
10#
回复 9楼elwin的帖子

elwin 你好,
首先,只保存数据,加载之后,再设置格式可以设置和原来格式相同。
其次,我想可以把格式单独存储到数据库,使用 StyleInfo 的 Serialize 方法存储到流中,进而存入数据库。这样就可以把数据和格式分开了。
你的 Spread 格式很复杂吗?能否提供截图看看?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部