Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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# - Fatal编程技术网

C# 如何在不将大文件存储在应用程序内存中的情况下对其执行某些操作

C# 如何在不将大文件存储在应用程序内存中的情况下对其执行某些操作,c#,C#,在服务器上部署的Web应用程序中 using(Package pack = Package.Open(FileName.vsdx, FileMode.Open, FileAccess.ReadWrite)) 如何分配内存,此Using语句将存储此数据。 如果我的文件大小约为800MB,它仍将驻留在应用程序内存中,会发生什么。如果是,那么有没有更好的方法可以将其映射到应用程序内存以外的其他内存位置 因为同时该应用程序将被300-400个用户访问。@varocabas我猜OP正在使用该类打开zip

在服务器上部署的Web应用程序中

using(Package pack = Package.Open(FileName.vsdx, FileMode.Open, FileAccess.ReadWrite))
如何分配内存,此Using语句将存储此数据。 如果我的文件大小约为800MB,它仍将驻留在应用程序内存中,会发生什么。如果是,那么有没有更好的方法可以将其映射到应用程序内存以外的其他内存位置


因为同时该应用程序将被300-400个用户访问。

@varocabas我猜OP正在使用该类打开zip文件。
using
语句只是确保正确地处理给定对象(例如,调用
pack.Dispose()
)。我对您似乎正在使用的东西没有任何经验(正如@juharr所建议的),但它几乎肯定遵循与剩余的
System.IO
类相同的规则(否则,它们的创建者在不同方面的工作会非常糟糕)。例如:使用
StreamReader
,在执行类似
StreamReader sr=newstreamreader(path)的操作时,仅将整个文件存储在内存中;高级ReadToEnd()。也就是说:读取它的所有内容,而不仅仅是打开它。看起来你必须使用
GetPart
获得一个
PackagePart
,然后你可以使用
GetStream
获得一个
流。这样看来,您就可以加载部分文件了。很可能,
Package.Open
确实从文件中读取了一些信息,但它不太可能读取整个文件。验证您是否可以编写一个简单的测试应用程序并查看内存使用情况。我可以从包中读取内容,甚至可以进行所需的更改。我关心的是内存。假设文件是500MB,那么它将驻留在哪里。是否有任何方法可以将该内存映射到存储在其他位置,而不是应用程序内存。@varocarbas我猜OP正在使用该类打开zip文件。
using
语句只是确保正确处理给定对象(例如,调用
pack.Dispose()
)。我对您似乎正在使用的东西没有任何经验(正如@juharr所建议的),但它几乎肯定遵循与剩余的
System.IO
类相同的规则(否则,它们的创建者在不同方面的工作会非常糟糕)。例如:使用
StreamReader
,在执行类似
StreamReader sr=newstreamreader(path)的操作时,仅将整个文件存储在内存中;高级ReadToEnd()。也就是说:读取它的所有内容,而不仅仅是打开它。看起来你必须使用
GetPart
获得一个
PackagePart
,然后你可以使用
GetStream
获得一个
流。这样看来,您就可以加载部分文件了。很可能,
Package.Open
确实从文件中读取了一些信息,但它不太可能读取整个文件。验证您是否可以编写一个简单的测试应用程序并查看内存使用情况。我可以从包中读取内容,甚至可以进行所需的更改。我关心的是内存。假设文件是500MB,那么它将驻留在哪里。是否有任何方法可以将该内存映射到存储在其他位置,而不是应用程序内存。