【发布时间】:2013-06-11 17:24:13
【问题描述】:
我有一个静态类,其中包含许多从配置文件中读取值的函数。配置文件随软件一起提供,软件本身从不写入它们。
我的应用程序中有许多线程正在运行,我需要调用静态类中的一个函数。然后该函数将转到其中一个配置文件,查找一个值(取决于我在调用该函数时传递的参数),然后返回一个结果。
我需要线程能够同时读取所有文件(或者更确切地说,不同步到主线程)。线程永远不会写入配置文件。
因此,我的问题很简单,允许多个线程调用相同的静态函数同时从同一个文件中读取值会有什么问题吗?我可以理解,如果某些线程正在写入文件而其他线程正在读取文件,则会出现序列化问题,但这永远不会发生。
基本上:
1. 多线程同时读取同一个文件有什么问题吗?
2. 允许多个线程同时调用同一个静态函数(在同一个静态类中)有什么问题吗?
【问题讨论】:
-
只是备注.. 您可能想为配置编写一个包装类,将配置保存在内存中,而不是从文件中一遍又一遍地读取配置。最后将文件的读取封装在这样的类中会好很多。
-
配置文件包含数百行信息。我将一个值传递给一个函数,该函数读取文件并返回与我传入的值相关的配置信息。我认为不时读取文件而不是将整个内容存储在内存中的内存密集度较低,因为我不需要所有的信息。
-
总的来说,我很欣赏您努力创建优化软件的事实,但您在 Delphi 软件上工作,这通常意味着您的代码已经有十多年的历史了,它还可以运行又一个十年。您现在可以以不到 80 欧元的价格获得 24GB,因此在牺牲软件的可维护性以节省数千字节的 RAM 之前,最好三思而后行。
-
我同意你的观点,但该应用程序是相当密集的处理器,我们必须记住,我们的一些客户在非常低规格的 PC 上运行它,所以在这种情况下它更有意义与将大量不必要的信息读入内存相比,I/O 操作的开销可能会对我们的大部分客户群产生连锁反应。不过,感谢您的回复。
标签: multithreading delphi