透明 发表于 2015-1-16 22:20:05

ASP.NET网页设计ASP.NET中天生Excel碰到的成绩及改善方...

就安全性而言,Java已经远远低于VB.NET,更无法与安全性著称的C#相比。先看一下办法(个中略往了一些判别和扩大):
天生Excel老代码
复制代码代码以下:
///<summary>
///将一组工具导出成EXCEL
///</summary>
///<typeparamname="T">要导出工具的范例</typeparam>
///<paramname="objList">一组工具</param>
///<paramname="FileName">导出后的文件名</param>
///<paramname="columnInfo">列名信息</param>
publicstaticvoidExExcel<T>(List<T>objList,stringFileName,Dictionary<string,string>columnInfo)
{

if(columnInfo.Count==0){return;}
if(objList.Count==0){return;}
//天生EXCEL的HTML
stringexcelStr="";

TypemyType=objList.GetType();
//依据反射从传送出去的属性名信息失掉要显现的属性
List<PropertyInfo>myPro=newList<PropertyInfo>();
foreach(stringcNameincolumnInfo.Keys)
{
PropertyInfop=myType.GetProperty(cName);
if(p!=null)
{
myPro.Add(p);
excelStr+=columnInfo+"        ";
}
}
//假如没有找到可用的属性则停止
if(myPro.Count==0){return;}
excelStr+="
";

foreach(TobjinobjList)
{
foreach(PropertyInfopinmyPro)
{
excelStr+=p.GetValue(obj,null)+"        ";
}
excelStr+="
";
}

//输入EXCEL
HttpResponsers=System.Web.HttpContext.Current.Response;
rs.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
rs.AppendHeader("Content-Disposition","attachment;filename="+FileName);
rs.ContentType="application/ms-excel";
rs.Write(excelStr);
rs.End();
}

到这个时分我想应当有伴侣能看出来成绩地点了。

这个办法天生Excel数据量不年夜的时分不会呈现成绩,当数据质变年夜以后成绩就出来了。由于办法内里界说了一个string范例的变量,将必要添补到Excel的内容叠加。关于string范例的数据利用+=操纵相称于利用string.Concat办法毗连字符串。每当举行一次+=操纵的时分就会天生一个新字符串。一定会启示一块内存,如许的操纵一多就会把内存耗尽,发生一个OutOfMemoryException。

晓得了成绩地点,改善起来也很简单,那就是使用StringBuilder叠加必要添补到Excel的内容,改善后的代码以下:
改善后天生Excel的代码
复制代码代码以下:
///<summary>
///将一组工具导出成EXCEL
///</summary>
///<typeparamname="T">要导出工具的范例</typeparam>
///<paramname="objList">一组工具</param>
///<paramname="FileName">导出后的文件名</param>
///<paramname="columnInfo">列名信息</param>
publicstaticvoidExExcel<T>(List<T>objList,stringFileName,Dictionary<string,string>columnInfo)
{

if(columnInfo.Count==0){return;}
if(objList.Count==0){return;}
//天生EXCEL的HTML
StringBuilderexcelStr=newStringBuilder(objList.Count*columnInfo.Count);

TypemyType=objList.GetType();
//依据反射从传送出去的属性名信息失掉要显现的属性
List<PropertyInfo>myPro=newList<PropertyInfo>();
foreach(stringcNameincolumnInfo.Keys)
{
PropertyInfop=myType.GetProperty(cName);
if(p!=null)
{
myPro.Add(p);
excelStr.Append(columnInfo).Append("        ");
}
}
//假如没有找到可用的属性则停止
if(myPro.Count==0){return;}
excelStr.Append("
");

foreach(TobjinobjList)
{
foreach(PropertyInfopinmyPro)
{
excelStr.Append(p.GetValue(obj,null)).Append("        ");
}
excelStr.Append("
");
}

//输入EXCEL
HttpResponsers=System.Web.HttpContext.Current.Response;
rs.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
rs.AppendHeader("Content-Disposition","attachment;filename="+FileName);
rs.ContentType="application/ms-excel";
rs.Write(excelStr);
rs.End();
}
}

在实例化StringBuilderexcelStr=newStringBuilder(objList.Count*columnInfo.Count);时分预分派入手下手巨细,如许能更好的利用StringBuilder。至此,改善完成。
别的,假如您以为反射会影响功能,那末能够改成表达式树的体例,大概利用limit。据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。

飘飘悠悠 发表于 2015-1-19 08:53:57

asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!

老尸 发表于 2015-1-25 21:00:42

网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!

活着的死人 发表于 2015-2-4 03:51:27

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

透明 发表于 2015-2-9 14:56:03

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

爱飞 发表于 2015-2-27 08:37:57

同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。

乐观 发表于 2015-3-9 00:10:00

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

冷月葬花魂 发表于 2015-3-16 19:20:31

同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。

飘灵儿 发表于 2015-3-23 00:19:42

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
页: [1]
查看完整版本: ASP.NET网页设计ASP.NET中天生Excel碰到的成绩及改善方...