gpt4 book ai didi

.net - 寻找 .Net 磁盘缓冲流

转载 作者:行者123 更新时间:2023-12-02 02:36:56 25 4
gpt4 key购买 nike

我有一个 .NET 2.0 Web 应用程序,仅用作客户端应用程序的后端,该应用程序将向其发送包含 1-500KB 数据的请求,服务器将对该数据进行一些处理,然后进行查询一个数据库,用于构建一组数据以返回客户端——从 200KB 到 200MB 的数据。数据可能需要长达 15 分钟才能从数据库完全加载,而完全传输到客户端可能需要长达一个小时(尽管通常时间要短得多——20 秒查询,10 秒传输)。然而,对于一些数据库查询和客户端的组合,有时数据库更快,有时到客户端的链接更快。

客户端通过不同质量的链接进行连接——一些通过 10MB LAN,一些通过共享的 64kbps ISDN 链接。我有四件事要确保:

  1. 数据库连接必须保持打开的时间越短越好。
  2. 必须使用最少的服务器内存。
  3. 数据必须尽快流式传输到客户端。
  4. 进程的总持续时间应尽可能接近两个进程的最大值(DB等待时间、网络传输时间),而不是两个进程的时间之和。

到目前为止,我们可以在三种模式下运行代码:

  1. 从数据库中获取数据后,将其写入响应流。
  2. 从数据库中获取数据时,将其保存在内存中。 DB读取完成后,关闭DB连接,将内存中的数据写入响应流。
  3. 从数据库中获取数据后,将其写入临时文件。从数据库读取完成后,关闭数据库连接并从临时文件读取并写入响应流。

如你所想,这些都不能完全满足我们对所有场景的要求。我们已经讨论过实现一些代码来根据一些变量来猜测我们应该使用三个代码路径中的哪一个,但我认为这里有一个更通用的解决方案,我正在寻找一些代码/一个库来处理这个问题对我们来说。

我正在寻找的是我可以围绕我可以从我们的 HttpHandler 写入的 .NET 流(输出流)包装的东西,它将处理将数据写入底层流。如果底层流有太多未决数据,它会存储在内存中,并在可能时稍后发送。一旦内存缓冲区变得太大,它就会回退到一个临时文件作为缓冲区。当我尝试关闭流时,它会阻塞,直到所有数据都写入流。

您是否知道我可以用作起点的任何此类代码,或具有此类内容的库,或关于我应该注意事项的任何指导?或者,我是否试图完全过度设计此解决方案?

最佳答案

操作系统非常擅长在正确的时间将内存交换到磁盘。与其事后猜测操作系统,不如使用常规缓冲流并让交换空间成为您的文件后备?

关于.net - 寻找 .Net 磁盘缓冲流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1095599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com