找回密码
 立即注册

QQ登录

只需一步,快速开始

lkxtracy

金牌服务用户

12

主题

57

帖子

195

积分

金牌服务用户

积分
195
lkxtracy
金牌服务用户   /  发表于:2019-3-14 17:23  /   查看:3353  /  回复:6
A线程Open
B线程Dispose

异常:

   在 FarPoint.Win.Spread.FpSpread.Dispose(Boolean disposing)
   在 System.ComponentModel.Component.Dispose()
   在 SpreadComsumer.DoWork(FpSpread& item) 位置 C:\Users\Administrator\source\repos\ConsoleApp1\ConsoleApp1\Class1.cs:行号 75
   在 Comsumer`1.Consume(ConcurrentQueue`1 queue) 位置 C:\Users\Administrator\source\repos\ConsoleApp1\ConsoleApp1\Class1.cs:行号 58
   在 UnitTest1.StartComsume2(Object parameter) 位置 C:\Users\Administrator\source\repos\ConsoleApp1\ConsoleApp1\Class1.cs:行号 94
   在 UnitTest1.<>c__DisplayClass2_0.<TestMethod2>b__1() 位置 C:\Users\Administrator\source\repos\ConsoleApp1\ConsoleApp1\Class1.cs:行号 105
   在 System.Threading.Tasks.Task.InnerInvoke()
   在 System.Threading.Tasks.Task.Execute()


请尽快处理!谢谢!

ConsoleApp1.rar

10.68 MB, 下载次数: 98

测试代码及文件

6 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-15 11:19:14
沙发
Dispose 必须在Open结束后才可以,多线程处理无法保证这个,一个人开门,另一个人关门,搞不好人就夹死了。
并且Spread WinForms作为UI控件,能否在console应用中使用还需要确认。
在WinForms程序中 spread需要去渲染画布,所以也不建议在多线程中使用,会存在资源冲突。

如果您仅仅是后端批量处理Excel,我们有专门的GCDocument for Excel去做这个事情,没有UI资源的依赖。
回复 使用道具 举报
lkxtracy
金牌服务用户   /  发表于:2019-3-18 11:07:08
板凳
测试代码:
string path = @"C:\Users\Administrator\Desktop\fpspread";
        DirectoryInfo root = new DirectoryInfo(path);
        FileInfo[] files = root.GetFiles("*.xml");
        DateTime t1 = DateTime.Now;
        foreach (FileInfo file in files)
        {
            FpSpread cellPack = new FpSpread(LegacyBehaviors.None);
            cellPack.Open(file.FullName);
            cellPack.Dispose();
            cellPack = null;
        }
        DateTime t2 = DateTime.Now;
        Console.WriteLine($"open {files.Length} files-> {(t2 - t1).TotalMilliseconds} Milliseconds");

问题:
1:多文件循环代开,Dispose接口并没有明显的内存释放,最终导致Out of memory。
2:多线程分开处理Open和Dispose操作,报错问题。

测试文件.xml

1.58 MB, 下载次数: 76

测试文件

回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-19 00:16:50
地板
开发那边反馈了,会根据您的需求优化内部资源使用,但是这个发布要等到SP1.

现在临时方案设置spread=null,让 .net自己回收

        //item.Dispose();
        item = null;
回复 使用道具 举报
lkxtracy
金牌服务用户   /  发表于:2019-3-19 08:52:06
5#
dexteryao 发表于 2019-3-19 00:16
开发那边反馈了,会根据您的需求优化内部资源使用,但是这个发布要等到SP1.

现在临时方案设置spread=nul ...

方便的话麻烦给我回个电话,刚才打你们电话没人接
回复 使用道具 举报
lkxtracy
金牌服务用户   /  发表于:2019-3-19 13:52:02
6#
lkxtracy 发表于 2019-3-19 08:52
方便的话麻烦给我回个电话,刚才打你们电话没人接

1.xml文件加载性能
2.多线程加载xml文件,Dispose报错
3.多线程调用Print,报错
4.超页线(参考excel),这个算是资料编制的一个刚需了,不知道你们为什么没有考虑这个需求。

主要就是四个点,辛苦了!
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-3-19 14:48:07
7#
第四点有这个需求,但是总体上用户需求比较少,而且有打印预览,能部分解决问题,所以一直优先级不高。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部