深圳--付
有做过大批量数据导出的朋友吗
这边导出几万数据要很久
深圳--付
我这里几万贼慢
IIS worker process 这个进程会消耗很大的cpu
深圳--付
这个是老系统
我目前也没啥好的思路
他是读取几万的数据到datatable 然后循环生成一个htmltable 在返回给客户端
@Miles @no color° 半透明 你两有啥好的思路
Fierce eagle
一次渲染完的话 差不多有几兆了吧
Miles
写这个东西的人
是个SB
鉴定完毕
只需要一个存储过程
生成一个datatable
调用一个插件
就可以了
Fierce eagle
光数据的话应该不大,但是渲染成html字节就大了
风轻云淡
在浏览器端生成不好吗
干嘛用服务商生成再返回
深圳--付
就是这里头疼
读取数据没问题 就是数据转存到excel这里满
Miles
小呀嘛小伙子我是这么些的加了一个傻逼女我草 Fierce eagle
你把这个生成物理文件保存在服务器上
Fierce eagle
客户要用的话直接让他去下载
深圳--付
生成物理文件也需要进行循环插入到excel
Fierce eagle
至少比这个稍微快点
提前生成好
深圳--付
npoi我用过 那时候是导入使用
导出性能好吗
哈哈哈
在前台取datarow["name"]值怎么写
Torres图图爸
大家好请教一个问题您在使用Ajax.BeginForm的时候有没有出现多次提交的问题? @using (Ajax.BeginForm("/AnalysisExcel", null, new AjaxOptions() { InsertionMode = InsertionMode.Replace, OnSuccess="alert();", UpdateTargetId = "mymy", HttpMethod = "Post" }, new { enctype = "multipart/form-data" }))
{
<h3>导入Excel</h3&get;
<hr&get;
<div class="row"&get;
<div class="col-xs-6"&get;
<div class="form-group"&get;
<input type="file" name="excel" id="input01"&get;
</div&get;
</div&get;
<div class="col-xs-2"&get;
<div class="form-group"&get;
<input type="submit" id="upload" class="btn btn-primary" value="上传"/&get;
</div&get;
</div&get;
</div&get;
}
<div id="mymy"&get;</div&get;第一次提交一次 第二次点击就提交两次 星星点灯
这个方法确定可以上传嘛?
我的必须换html.beginform才行
后台取request.files.count是0
Torres图图爸
找到原因了这是我后台响应的方法本来是return view()改成就可以了return view会默认返回加载的js,所以js越来越多,出现重复提交 星星点灯
你可以截一下输出的源码看看嘛?
form段的就行
深圳--付
@ 情傷 NPOI导出快本地只要3秒 快多了
深圳--付
恩 服务器应该顶多5秒
不错现在数据才2W多
@ 情傷 如果一个请求 客户端放弃了等待 服务器获取到状态码?
深圳--付
比如客户端发起一个请求 但是服务器响应要10秒 但是用户在第5秒就关闭了浏览器 那么能不能这时候服务器停止内部的逻辑处理 节约资源
深圳--付
突然想到的 Fierce eagle
浏览器关了以后,代码还继续运行
因为http是无状态的
深圳--付
但是能不能获取到客户端放弃等待 然后结束逻辑处理应该是可以的 不过这是底层 深圳--付
这上面说http是在 tcp/ip 之上 那么tcp/ip会先断开
我来自豪宅
@Fierce eagle 你要达到的是不是检测用户浏览器关闭
Fierce eagle
因为每个http请求都会开一个新进程
深圳--付
比如客户端发起一个请求 但是服务器响应要10秒 但是用户在第5秒就关闭了浏览器 那么能不能这时候服务器停止内部的逻辑处理 节约资源
深圳--付
http 在tcp/ip 之上
那么http的响应结果是通过tcp/ip通道发送过去的
我来自台湾
下了SQL command後 即使暫停了
Fierce eagle
发请求也没办法,因为开了个新进程
我来自台湾
之前有人問過我類似問題
我自己推測的因素是
我来自豪宅
@我来自台湾 我觉得是可以,因为可以通过http发送信息
深圳--付
如果用户放弃等待 其实服务器运算出结果也无法响应到用户那里了
Fierce eagle
除非你用socket通信,保持长链接
我来自豪宅
@Fierce eagle 不过如果是强制结束进程肯定是不行的
我来自台湾
你要如何中斷他
透過abort對吧
那麼問題來了
這種強制結束的做法
會不會產生後遺症
譬如程序正在寫文檔
被強制中斷
文檔就損毀了
所以基本上 asp.net無法預期你的程序會做啥事情
所以他不可能這樣搞
深圳--付
我主要是想 如果一个比较耗费资源的请求 发起了很多 但是用户放弃了等待
linkin↑park
@Fierce eagle 这个回答 你够了
我来自台湾
我現在做法是這種長時程運行的程序
用quartz在背景運行
Fierce eagle
换个角度想,假如你不用浏览器直接通过程序请求
我来自台湾
quartz提供可以job中斷的方法
job去實現即可
我来自台湾
在web的程序不適合長時間運行
要做長時間運行的程序
我来自豪宅
@深圳--付 如果你要求不高可以在浏览器关闭页面发送信息要求终止
我来自台湾
一定是背景運行
把http當作一個命令請求器去看待
高併發問題也是如此
如果要在一個request就把所有事情完成
是有問題的
深圳--付
目前基本上都是等一个request处理所有逻辑
异步是有使用的
Fierce eagle
有这想法还不如想办法优化响应时间
优化下数据库什么的
深圳--付
@Fierce eagle 优化是有极限的
中间件这块是吧
我来自豪宅
@深圳--付 你能说说你想实现什么功能码?
深圳--付
@我来自豪宅 我的天 讲了这么 你还不知道说啥么
你翻下聊天记录
我来自豪宅
我没看你上面说的我翻翻我只知道你想判断浏览器关闭然后去中断服务器上的任务你是想导出文档吗 Fierce eagle
就是说电脑突然断电也要终止服务器任务
深圳--付
对呀 文档就是这个 你们聊天记录慢慢看吧 我来自豪宅
如果不要求判断断点这种情况,我觉得你用浏览器关闭事件就行了
断电
最好的肯定是台湾哥那种做法
不然页面跳转什么的你都要处理
深圳--付
恩
恩
@我来自台湾 台湾哥 Quartz 是针对java的吧 你不是做net吗?
我来自豪宅
我之前公司做一个视频播放,要记录用户看到哪里,为了防止断电什么的情况,然后前台每10秒左右就要发个请求到服务端,那并发
有点可怕
我来自豪宅
@我来自台湾 quartz对这种情况适不适用?
然后专门放了服务器用来给这个请求连接好像
我来自台湾
還有個東西
專門處理這事情的
Hangfire
這種問題早有人搞了...
Hangfire連UI都幫你做好了
就是用來處理web長時程運行的問題
深圳--付
这玩意挺火的吧
前几天看到了 打算这几天深入研究呢
popasp开源mvc框架,支持mssql mysql
@我来自豪宅 记录到cookie不就行了?
我来自豪宅
断电你能记录啥
而且观看进度要记录到服务端
popasp开源mvc框架,支持mssql mysql
每隔一段时间记录到cookie
发到后台的时候先保存到内存中
我来自豪宅
用户可能回家登录账户啊
所以一定是要存到服务端
popasp开源mvc框架,支持mssql mysql
嗯
我没有做过视频系统
我来自豪宅
我也没,那块不是我做
@我来自台湾 我看了下,Hangfire好像是后台定时执行任务
我要返回前台视频的观看进度呢?
popasp开源mvc框架,支持mssql mysql
我做过投票系统,是将数据先记录到内存,走了量外保存到数据库
我来自豪宅
是不是用Hangfire也能办到捕捉浏览器关闭前执行
深圳--付
@我来自豪宅 你那个播放的视频资源 不可以直接对视频流控制吗
我来自豪宅
你的大概思路是什么呢
@深圳--付 因为他们用的是ie的视频控件,服务端取不到进度,要是用flash就行了
我来自台湾
瀏覽器播影片
早期瀏覽器梅支持串流
所以在標準情況下無法做串流
只能整個檔案下載後 才能撥放
因為早期沒支持
所以要跨過瀏覽器處理
因此得靠flash activex這些插件
簡單來說就是自己搞
而html5已經有串流協議
所以這也是為什麼現在是頻網站都改用html5
因為flash activex這種技術不是所有平台都支持
即使支持對於開發的成本太高
畢竟不是標準