在重构我的代码以开始试验之前,我希望社区的智慧可以告诉我正确的道路。
问题:我有一个WPF程序在数百个ini文件上执行差异。为了实现差异,我想保留数百个其他文件在内存中进行区分的基本文件。我发现使用自定义类来存储这些数据,一旦我加载了10-15个文件,每个文件大约有4000行,就会停止我的GUI。
我正在考虑几种提高绩效的策略:
BackgroundWorker
线程中运行所有基本文件数据。我没有在GUI线程上做这些文件的任何工作,但也许所有存储的数据都会以某种方式影响它。我猜这里。 System.Runtime.Caching
课程。 在我看来,here on SO提出的问题没有回答这类工作的最佳策略是什么。提前感谢您提供的任何帮助!
答案 0 :(得分:3)
假设100个字符的文本行15 * 4000 * 100只有6MB,这是现代PC上的一小部分内存。如果您的GUI暂停,那么对我而言,这表明虚拟内存被换入磁盘。只有6MB才有意义,所以我要弄清楚它真正占用了多少以及为什么。如果可能是一些微不足道的错误,比重新思考整个策略更容易解决。另一种可能性是它与内存消耗无关,而是算法问题。
答案 1 :(得分:3)
答案 2 :(得分:0)
如果您的应用程序开始挂起,则更像是在GUI过程中进行密集处理,消费者过多地将资源用于GUI线程上的CPU /内存,因此GUI线程无法及时重新绘制UI。
解决它的最好方法是生成单独的线程来执行diff操作,正如你在帖子中提到的,你可以使用backgroundworker,或者你可以使用threadpool生成尽可能多的线程来做diff。
不要认为你需要将文件缓存在内存中,我认为将结果保存到文件中并按需加载文件会更合适。它不应该成为您的应用程序的瓶颈。