当前位置: 首页 > news >正文

策划对于企业网站建设来说电商平台运营费用预算

策划对于企业网站建设来说,电商平台运营费用预算,龙岗附近做网站公司哪家好,wordpress显示浏览量使用 Microsoft.Office.Interop.Excel 虽然有速度慢的缺点;但是作为自带引用,兼容性最好,而且是COM对象模型也很熟悉(Excel里直接录个宏,很方便把VBA代码转成VB.NET)。所以处理几百上千条的小数据时还是很方便的。 而 Microsoft.…

使用 Microsoft.Office.Interop.Excel 虽然有速度慢的缺点;但是作为自带引用,兼容性最好,而且是COM对象模型也很熟悉(Excel里直接录个宏,很方便把VBA代码转成VB.NET)。所以处理几百上千条的小数据时还是很方便的。

Microsoft.Office.Interop.Excel 用得不多的最大问题其实就是拿简单例子可以正确释放Excel,做了大量操作后却发现在任务管理器中依然有多余Excel进程存在。

问题原因当然是COM对象映射到Interop交互对象之后,.NET下的交互对象释放次序不符合COM对象预期,导致不能正确释放。比如

Dim xlApp New Excel.Application() With {.Visible = False}
Dim xlWorkbooks As Excel.Workbooks = xlApp.Workbooks
Dim xlWorkbook As Excel.Workbook = xlWorkbooks.Open("...")Dim value As Object = xlWorkbook.Sheets(1).Cells(1,1).ValuexlWorkbook.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook)
xlWorkbook = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbooks)
xlWorkbooks = Nothing
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlApp = Nothing
System.GC.Collect()

中间取value这行代码看起来很正常,没有保留任何交互对象。其实在整个对象访问路径上隐式使用了以下交互对象,要靠GC来释放(通常是延后的————即调用Close()时交互对象未释放、工作簿关闭不了,之后的Quit()Excel不会退出),

xlWorkbook.Sheets 'Excel.Sheets
xlWorkbook.Sheets(1) 'Excel.Worksheet
xlWorkbook.Sheets(1).Cells 'Excel.Range
xlWorkbook.Sheets(1).Cells(1,1) 'Excel.Range

要做到正确释放,要把这些交互对象全部在Close()前释放。为了方便使用,把 Excel.ApplicationExcel.Workbook 封装在类中,用 IDisposable 接口确保释放。用类似下面的属性封装访问

    Public Property CellValue(sheetIndex As Object, rowNo As Integer, colNo As Integer) As ObjectGetDim xlSheets As Excel.Sheets = m_xlWorkbook.SheetsDim xlSheet As Excel.Worksheet = xlSheets.Item(sheetIndex)Dim xlCells As Excel.Range = xlSheet.CellsDim xlCell As Excel.Range = xlCells.Item(rowNo, colNo)Dim value As Object = xlCell.ValueSystem.Runtime.InteropServices.Marshal.ReleaseComObject(xlCell)System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells)System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets)System.GC.Collect(0)Return valueEnd GetSet(value As Object)' 同理所有交互对象保留变量、释放End SetEnd Property

上面的属性是通过行号、列号访问单元value;如果需要通过A1格式访问单元又要定义属性;如果需要访问单元text也要单独定义属性。
总之全部封装好后,读写完Excel文件后就能正确释放,不再有多余Excel进程残留。

http://www.yayakq.cn/news/48413/

相关文章:

  • 在建设主题网站时北京网站的网站建设公司
  • php做网站开发有什么框架济南做网站的高端品牌
  • 制作企业网站的秘诀网页设计与制作教程期末考试题
  • 做网站上数字快速增加建筑人才网河南省2022年3月安全员
  • 西安摩高网站建设网站开发的发展
  • 网站速度的重要性程序员必备工具
  • 全球新闻最新消息百度关键词优化大师
  • 网站建设 题目wordpress 主题next
  • 门户网站建设公司流程做网站推广多少钱
  • 做网站怎么带流量网站建设结课小论文
  • 一个网站的建设流程有哪些资料网络管理网址
  • 百家号淄博圻谷网站建设微信上优惠券的网站怎么做的
  • 土建设计网站烟台网站建设在哪
  • 网站建设费算费用还是固定资产微信网站名
  • 东源县住房和城乡建设部网站咖啡网站模板
  • 网站域名等级天河怎样优化网站建设
  • 电子商务做网站开网站怎么开
  • 电子商务网站建站怎么给自己喜欢的人做网站
  • 免费网站正能量ecommercial+wordpress
  • 做备案的网站建筑模板是什么东西
  • 安仁网站制作网站建设的生存期模型
  • 小企业网站建设有什么用金华网站建设公司
  • 济源做网站公司wordpress 帝国王
  • 金色财经网站开发中国建筑网官网总公司
  • 东莞想做网站找什么公司云天下网站建设
  • 网站建设合同缴印花税烟台专业做网站的公司
  • 怎么用vs2010做网站设计外包公司有哪些
  • 江苏齐力建设集团网站wordpress 主机什么系统
  • 做高档衣服的网站腾讯云服务器网站建设
  • 可视化手机网站开发工具原阳县建站塔山双喜