检索许多巨大的EPS文件,并在ASP.NET应用程序中将它们转换为JPEG

时间:2010-03-23 10:08:07

标签: c# asp.net performance

我在数据库中有很多(> 600)EPS文件(300 KB - 1 MB)。在我的ASP.NET应用程序(使用ASP.NET 4.0)中,我需要逐个检索它们并调用一个Web服务,它将内容转换为JPEG文件并更新数据库(JPEG内容列与JPEG 内容)。但是,从SQL管理工作室本身检索600个内容本身需要太长时间(10个EPS内容需要5分钟)。

所以我有两个问题: -

1)如何获取EPS内容(遗憾的是,选择一定数量的内容不是一种选择:-(): -

方法1: -

foreach(var DataRow in DataTable.Rows)
{
// get the Id and byte[] of EPS
// Call the web method to convert EPS content to JPEG 
}

foreach(var DataRow in DataTable.Rows)
{
// get only the Id of EPS
// Hit database to get the content of EPS
// Call the web method to convert EPS content to JPEG
}

Any other approach?

2)使用web方法将EPS转换为JPEG,用于> 600内容。 当然,每次通话都是长时间运行的。任务parellel库(TPL)是否是实现这一目标的更好方法?

另外,在SQL CLR函数中做整个事情是个好主意吗?

编辑: - 不幸的是,我必须在ASP.NET应用程序本身中执行此操作,并且在Windows服务等单独的过程中执行此操作不是一种选择。

1 个答案:

答案 0 :(得分:1)

这种方法对我来说似乎根本不对。如果您在方法1中建议您的服务能够访问数据库本身(更新它),那么为什么您的服务不会将内容拉出来?

我很想做点像......

1)(可能)在表格中添加一个列来标记EPS是否已被翻译,也可能存储翻译结果。
2)如果你绝对必须从ASP.NET中解决这个问题,那么就是   a)从您的前端调用数据库并获取尚未翻译的ID并将其传递给服务进行翻译,或者   b)只是发出一个调用服务说“现在转换所有未转换的eps文件”
3)更好的替代方案是让一个预定的工作在某个地方运行,进行转换。这意味着您的ASP.NET进程不会等待转换运行。

通过线路传递数据对我来说似乎没有必要,但我意识到我不知道服务器的物理位置或网络功能。