Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用服务来处理大文件_C#_Wcf - Fatal编程技术网

C# 调用服务来处理大文件

C# 调用服务来处理大文件,c#,wcf,C#,Wcf,所以我有这个WCF服务,它为我提供PDF处理功能。现在它正在接受并返回纯字节数组byte[],但这意味着它总是将所有内容读取到内存中,甚至在处理流时,它也必须将它们排列到字节数组中。问题是,这会导致内存不足问题和堆碎片 我有两个选择来优化它,这样它就不会占用太多内存: 使用流。虽然很诱人,但我可能必须将其保存到磁盘上,以便由PDF工具包进行处理。考虑到绑定数量有限,以及双工流和参数数量的限制,这也是一种非常挑剔的策略。 来回传递UNC文件路径。看起来很有希望,但会使事情复杂化,因为有人需要在使用

所以我有这个WCF服务,它为我提供PDF处理功能。现在它正在接受并返回纯字节数组byte[],但这意味着它总是将所有内容读取到内存中,甚至在处理流时,它也必须将它们排列到字节数组中。问题是,这会导致内存不足问题和堆碎片

我有两个选择来优化它,这样它就不会占用太多内存:

使用流。虽然很诱人,但我可能必须将其保存到磁盘上,以便由PDF工具包进行处理。考虑到绑定数量有限,以及双工流和参数数量的限制,这也是一种非常挑剔的策略。 来回传递UNC文件路径。看起来很有希望,但会使事情复杂化,因为有人需要在使用后清理文件。
在优化资源使用、内存、网络和文件系统方面,哪一种方法能取得最佳效果?

这是一种老派做法,但我会反复传递UNC文件路径。幸运的是,我们开发人员在这种方法方面有几年的经验,请参见:大约在1980年左右的Unix版本7中的打印后台处理程序。

这是一种老派的方法,但我会来回传递UNC文件路径。幸运的是,我们开发人员有几年使用这种方法的经验,请参见:大约在1980年左右的Unix版本7中的后台打印程序。

我也会选择UNC文件路径选项。我在通过应用程序服务器将用户上传的文件从Web服务器传输到SharePoint时使用过此选项。Web服务器将文件路径传递给App Server,App Server随后将拾取文件并将其加载到SP中。更好的选择是通过Web服务器到App Server的Web服务调用将文件作为字节数组传递

如果您担心您的服务可能不总是进行清理,例如,如果出现异常,您可以始终制定备份计划,并使用简单的方法(如带有计划任务的powershell脚本)来删除应在较早时删除的旧文件,则需要在之后清理文件

<> P>一个要考虑的是文件名冲突的可能性。在我们的例子中,两个用户可以上载同名的单独文件,因此我们必须确保将正确的文件放入正确的SP文件夹。我们通过让本地存储该文件的web服务器使用GUID名称重命名该文件,然后将新名称传递给应用程序服务器来解决这个问题。原始文件名作为元数据发送到应用程序服务器,以便它可以在加载到SP之前将文件重命名回其原始名称。

我也会选择UNC文件路径选项。我在通过应用程序服务器将用户上传的文件从Web服务器传输到SharePoint时使用过此选项。Web服务器将文件路径传递给App Server,App Server随后将拾取文件并将其加载到SP中。更好的选择是通过Web服务器到App Server的Web服务调用将文件作为字节数组传递

如果您担心您的服务可能不总是进行清理,例如,如果出现异常,您可以始终制定备份计划,并使用简单的方法(如带有计划任务的powershell脚本)来删除应在较早时删除的旧文件,则需要在之后清理文件

<> P>一个要考虑的是文件名冲突的可能性。在我们的例子中,两个用户可以上载同名的单独文件,因此我们必须确保将正确的文件放入正确的SP文件夹。我们通过让本地存储该文件的web服务器使用GUID名称重命名该文件,然后将新名称传递给应用程序服务器来解决这个问题。原始文件名作为元数据发送到App Server,以便在加载到SP之前将文件重命名回原始名称