Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录
--------------------------------------------------------------后台代码------------------------------------------
public JsonResult ImportPDF(Int64 id)
{
try
{
Guid currentGuid = Guid.NewGuid();
if (Request.Files["FileData"].HasFile())
{
HttpPostedFileBase file = Request.Files["FileData"];
//if (file.InputStream.Length > 16*1024*1024)
//{
// throw new Exception("文件过大,导入不成功!");
//}
CreateFolder();
string path = Server.MapPath("/Ebook");
string fileName = "1.pdf";
//Directory.CreateDirectory(path);
file.SaveAs(string.Format(@"{0}\{1}", path, fileName));
PDFText(string.Format(@"{0}\{1}", path, fileName), id, currentGuid);
}
return Json(currentGuid.ToString(), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 获取导入PDF的进度
/// </summary>
/// <returns></returns>
public JsonResult GetPdfProgress(string guidStr)
{
try
{
Guid guid = new Guid(guidStr.Trim('"'));
if (pdfProDic.ContainsKey(guid))
{
return Json(new { guidKey = guidStr, proVal = pdfProDic[guid] }, JsonRequestBehavior.AllowGet);
}
return Json(new {guidKey = guidStr}, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
throw ex;
}
}
//注意要使用静态(字典与GUID为了应对多人同时访问)
static Dictionary<Guid,int> pdfProDic=new Dictionary<Guid, int>();
public void PDFText(string fileName, Int64 id,Guid guid)
{
System.Threading.Tasks.Task.Factory.StartNew(user =>
{
try
{
pdfProDic.Add(guid,0);
Domain.UserModel.User currentUser = user as Domain.UserModel.User;
if (user != null)
{
#region 执行pdf导入数据库
//注意加载PDF文件过大会出错
PDDocument doc = PDDocument.load(fileName);
PDFTextStripper pdfStripper = new PDFTextStripper();
short currentPage = GetMaxPageNumber(id);
if (currentPage < 10000)
currentPage = 10000;
float j = 0;
int progress = 0;
for (int i = 0; i < doc.getNumberOfPages(); i++)
{
currentPage++;
//索引是从0开始,第一页表示0~1
pdfStripper.setStartPage(i);
pdfStripper.setEndPage(i + 1);
String pdfStr = pdfStripper.getText(doc);
var target = EntAppFrameWorkContext.Application.ExtenedT<Ebook, Int64, EbookAppExt>().
CreatePage(
id,
currentPage,
pdfStr,
currentUser);
j = i+1;
progress = (int)((j / doc.getNumberOfPages()) * 100);
if (Convert.ToInt32(j) >= doc.getNumberOfPages())
{
progress = 100;
//为了性能的提升,这时候进行排序
EntAppFrameWorkContext.Application.ExtenedT<Ebook,Int64,EbookAppExt>().InitEbookPage(id);
}
pdfProDic[guid] = progress;
}
doc.close();
#endregion
}
}
catch (Exception ex)
{
throw ex;
}
}, base.CurrentUser);
}
Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录的更多相关文章
- System.Threading.Tasks.Task 引起的 IIS 应用池崩溃
接口服务运行一段时间后,IIS应用池就会突然挂掉,事件查看日志,会有事件日志Event ID为5011的错误 为应用程序池“PokeIn”提供服务的进程在与 Windows Process Activ ...
- System.Threading.Tasks.Task引起的IIS应用程序池崩溃
问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状态,Web服务器无响应. 2. 从服务器端看(Windows Server 2008 + IIS 7.0 ...
- System.Threading.Tasks.Task 任务引起的IIS应用程序池崩溃
转载:http://www.cnblogs.com/aaa6818162/p/4421305.html 问题现象 IIS应用程序池崩溃(Crash)的特征如下: 1. 从客户端看,浏览器一直处于连接状 ...
- threading.local()、多线程里全局变量锁
这个人的系列文章值得一读:http://blog.51cto.com/suhaozhi/category3.html/p2,不过这个系列总共15偏,Python并发入门,有很多文字描述错误,有些道理也 ...
- 转载 Net多线程编程—System.Threading.Tasks.Parallel
.Net多线程编程—System.Threading.Tasks.Parallel System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Paral ...
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- System.Threading.Tasks
前言: 我们之前介绍了两种构建多线程软件的编程技术(使用异步委托或通过System.Threading的成员).这两个可以在任何版本的.NET平台工作. 关于System.Threading 的介绍 ...
- 静态局部变量、静态全局变量、extern全局变量、自动变量 札记
静态局部变量 静态局部变量. 从称呼上我们可以看出,静态局部变量首先是一个局部变量,因此其只在定义它的函数内有效,冠以静态的头衔后,其生存期就被延长了,不会随着函数的返回而被撤销.我们可以这样来理解: ...
- Python:使用threading模块实现多线程编程
转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...
随机推荐
- Scrum Meeting---Three(2015-10-27)
今日已完成任务和明日要做的任务 姓名 今日已完成任务 今日时间 明日计划完成任务 估计用时 董元财 今日我学习了Java Web,同时安装好了我的MySQL 4h 进行数据库设计以及Web项目的创建 ...
- E2 2014.08.05 更新日志
增加功能 增加手机.平板兼容模块,用手机平板也能正常登陆和使用软件 介绍 演示 对数据库全面优化,全面提升数据量很大时统计分析的性能 完善功能 销售分析增加按商品分类分析 完善客户明细窗口的客户信息 ...
- javascript学习-原生javascript的小特效(多个运动效果整理)
以下代码就不详细解析了,在我之前的多个运动效果中已经解析好多次了,重复的地方这里就不说明了,有兴趣的童鞋可以去看看之前的文章<原生javascript的小特效> <!DOCTYPE ...
- VB6.0
1. 安装包来自 http://msdn.itellyou.cn/ 下载的文件为: sc_vb6_ent_cd1.iso sc_vb6_ent_cd2.iso 2.安装时,"请输入产品的 I ...
- linux下,一些关于动态库的问题:
程序运行是加载动态库的几种方法: 第一种,通过ldconfig命令 ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令它,ldconfig命令通 ...
- epoll中et+多线程模式中很重要的EPOLL_ONESHOT实验
因为et模式需要循环读取,但是在读取过程中,如果有新的事件到达,很可能触发了其他线程来处理这个socket,那就乱了. EPOLL_ONESHOT就是用来避免这种情况.注意在一个线程处理完一个sock ...
- WebBrowser的内存释放
WebBrowser窗口自动滚动: this.webBrowser.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectan ...
- python语法笔记(五)
1.python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存 ...
- (转)HashMap分析
原文地址:http://www.cnblogs.com/ITtangtang/p/3948406.html HashMap的数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快 ...
- Nodejs环境变量
PATH,就是那个意思,没有特殊含义. NODE_PATH,将node_modules作为全局模块,多个安装目录用;分开.这样node在加载模块时首先会到项目目录下的node_modules目录加载相 ...