加载应用程序开头的所有项目,或者在每个用户操作中加载所需的项目?

时间:2015-05-18 04:17:22

标签: c# wpf performance

我正在做一个小型应用程序,它在Web服务中查询特定游戏中项目的游戏内价格。这个游戏显然在游戏中有200多个项目(带有相关的uint ID),并且有不同的项目类型(矿石,战斗等)。在我的应用程序中,我有一个视图,允许用户指定他想要查询价格的项目,它有2个组合框:一个用于项目类型,第二个用于显示该特定类型的项目(所以当第一个组合框改变,第二个组合显示与所选项目类型相关的项目。

此外,我无法直接访问游戏数据库中的所有项目类型,项目及其相关ID。我必须在我自己的数据库或XML文件或其他类似容器中复制该信息(可在线获取)。

知道,我的问题最好的方法:在应用程序启动时将整个数据库(或解析整个XML文件)加载到List<GameItem>或查询每次用户更改项目类型组合框时,数据库(或解析XML文件的一部分)?如果我在应用程序开始时进行整个加载,也许我会在没有任何内存的情况下运行应用程序,但另一方面,如果我每次用户更改时查询数据库(或解析XML文件)项目类型组合框,也许会有一个问题,那里会有一个&#34;延迟&#34;在每次他做这个操作的应用程序中。

2 个答案:

答案 0 :(得分:2)

您要做的第一件事是建立一个不会打扰或提及这些细节的高级界面,以便您可以在必要时改变主意,并尽可能少地做出回应。使界面专注于它应该做的事情,而不是它应该如何做。隐藏所有&#39; hows&#39; ,将其隐藏起来。

优化最适用于后见之明,手中有分析器和测量,代码可以优化而不会过于侵入/侵入,并在整个代码库中创建级联破坏(通过隐藏在良好的界面下)。

其次,请记住,百万 32位浮点变量只占用4兆字节的RAM。我最初来自4兆字节被认为是大量内存的时间。今天我们说的是便士。 200个项目通常没有足够的数据来关注自己增加的费用和实施磁盘索引结构的难度,除非每个项目分别存储了一百万个子元素。

因此,除非您正在处理特别大的项目,否则我建议从启动时将它们加载到内存中的基本解决方案开始。

如果涉及的商店逻辑涉及的安全性和原子性远远超过性能,那么您的案例和规模会受到更大的关注,以确保项目交易100%成功完成或失败/回滚100%作为整体(从未完成过半)。您可能还需要定期写入磁盘,以确保在服务器意外关闭的情况下不会丢失数据,但您不必为了更多的目的而使用该文件结构比安全备份。虽然我不清楚你是在处理商店方面的逻辑,还是只为客户提供方便的客户。如果是后者,你可以忘掉这些东西。

答案 1 :(得分:2)

我会在启动应用程序后启动一个异步方法,它会加载游戏项目。这样,当用户在您的应用中执行操作时,它也不会阻止用户界面。我已在我的应用中完成此操作,用户正在阅读电子书并同时加载200本书。这样,用户可以在后台加载书籍时继续阅读等。