【发布时间】:2010-02-04 22:34:16
【问题描述】:
我们希望更换我们商店当前的 POS 软件更新系统。目前,我们的网络服务器上有一个文件夹,其中托管了我们的寄存器每 30 分钟左右调用一次的脚本。它们传入当前版本号,服务器返回一个 XML 响应,其中包含任何需要更新的文件、散列和任何其他相关信息,以便注册者下载更新的文件。
我们想要一个服务来监听我们发送的 UDP 数据包,我们可以使用这些数据包来触发更新。这将防止寄存器不必要地轮询更新。我们正在编写一个更新服务器,它将侦听来自机器的 TCP 连接,进行身份验证,进行一些日志记录,然后发送已更改文件的更新。我们希望迁移到自定义更新服务器,因为我们需要在测试后将 POS 版本发布到某些机器上进行试运行,然后再在全公司范围内发布。
我已经编写了处理传入连接的代码并创建了一个新线程来处理与该客户端的通信等,但是我很难以多线程方式处理文件 I/O。
我很确定如果文件已经在另一个线程中打开,我将无法通过从一个线程打开它来访问它。我不想将文件读入内存并事先将它们保存在线程安全容器中,因为这会占用大量内存,特别是如果我需要为每个线程保留一份副本以避免线程问题。
在不使用大量内存或导致线程等待其他线程完成文件的情况下,以线程安全的方式从磁盘/内存访问这些文件的最佳方法是什么?
编辑:忘了说我们使用的是 C#。
【问题讨论】:
-
在我看来,您需要的是数据库或网络服务。
标签: c# multithreading file-io