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