Vb.net 我应该在应用程序启动时加载内存中的所有内容吗?
我正在使用VB.Net,我有一组数据,我必须能够相当快地过滤。基本上,这个程序就像GoogleSugest,但我使用的不是下拉菜单,而是列表框。当用户输入一个单词时,我使用LINQ比较该单词并过滤包含用户输入的单词。这些数据都是长度可变的字符串(从0到200个字符,大多数在150个字符的标记上),我有240000多个这样的字符串和计数-都存储在一个XML文件中 我的一位同事告诉我,将所有这些加载到内存(使用VB.Net的XML序列化程序加上字符串/对象集合)是不实际的,并且会减慢程序的“启动”时间。我还没有完成程序的构建,我正在重新考虑继续这条路Vb.net 我应该在应用程序启动时加载内存中的所有内容吗?,vb.net,memory,Vb.net,Memory,我正在使用VB.Net,我有一组数据,我必须能够相当快地过滤。基本上,这个程序就像GoogleSugest,但我使用的不是下拉菜单,而是列表框。当用户输入一个单词时,我使用LINQ比较该单词并过滤包含用户输入的单词。这些数据都是长度可变的字符串(从0到200个字符,大多数在150个字符的标记上),我有240000多个这样的字符串和计数-都存储在一个XML文件中 我的一位同事告诉我,将所有这些加载到内存(使用VB.Net的XML序列化程序加上字符串/对象集合)是不实际的,并且会减慢程序的“启动”时
所以,我的问题是:我应该继续我目前的方法(即在启动时将所有内容加载到内存中),还是有更好的方法来解决我的难题?如果您想阻止启动时间,并且将其保留在内存中不是性能问题,那么异步加载它。尽管从XML加载240.000+字符串并将其保存在内存中听起来并不是最好的主意。数据库可能是更好的方法。或者至少是像JSON这样解析速度更快的格式 如果您想阻止启动时间并将其保留在内存中不会影响性能,那么异步加载它。尽管从XML加载240.000+字符串并将其保存在内存中听起来并不是最好的主意。数据库可能是更好的方法。或者至少是像JSON这样解析速度更快的格式 取决于许多因素:
If
((you know the strings will not hugely increase in number) &&
(you know the spec of the machines that will run your app) &&
(you are able to test that the load time is *good enough* on the above spec))
{
**don't bother changing approach.**
}
else
{
**change approach.**
}
另一种方法显然是某种异步延迟加载。取决于许多因素:
If
((you know the strings will not hugely increase in number) &&
(you know the spec of the machines that will run your app) &&
(you are able to test that the load time is *good enough* on the above spec))
{
**don't bother changing approach.**
}
else
{
**change approach.**
}
另一种方法显然是某种异步延迟加载。您指的是加载大约36MB的字符串。尽管这并不是一个让人望而生畏的数量(尽管您自己阅读XML可能会更快地加载它……如果我担心性能的话,我不会使用序列化引擎),但这也是一个不小的数量。假设您没有像Mircea建议的那样异步启动,那么您需要在启动时间上增加几秒钟
如果以异步方式执行,则必须确保依赖于数据的任何UI进程在加载数据之前不会发生。这可能是一件很难保证的事情。您说的是加载大约36MB的字符串。尽管这并不是一个让人望而生畏的数量(尽管您自己阅读XML可能会更快地加载它……如果我担心性能的话,我不会使用序列化引擎),但这也是一个不小的数量。假设您没有像Mircea建议的那样异步启动,那么您需要在启动时间上增加几秒钟
如果以异步方式执行,则必须确保依赖于数据的任何UI进程在加载数据之前不会发生。这可能是一件很难保证的事情。在应用程序启动时将XML加载到内存中可能不是一个坏主意。但是如果你走这条路,我会考虑使用线程。这样做的想法是异步地将XML加载到内存中,以便UI在执行此操作时仍能响应。就用户而言,该应用程序的启动速度不应该再慢,但一旦启动,谷歌类似建议的功能应该会显著加快 我必须说,即使在内存中,这也是一种固有的低效操作,因为在以这种方式查询XML文件时,使用索引没有任何优势。这在SQL中的速度将提高10倍
当然,XML具有自包含和不需要额外组件的优点。这使得它成为查询少量数据的小型桌面应用程序的不错选择。否则,我会考虑使用数据库来获得更好的性能。
在应用程序启动时将XML加载到内存中可能不是一个坏主意。但是如果你走这条路,我会考虑使用线程。这样做的想法是异步地将XML加载到内存中,以便UI在执行此操作时仍能响应。就用户而言,该应用程序的启动速度不应该再慢,但一旦启动,谷歌类似建议的功能应该会显著加快
我必须说,即使在内存中,这也是一种固有的低效操作,因为在以这种方式查询XML文件时,使用索引没有任何优势。这在SQL中的速度将提高10倍当然,XML具有自包含和不需要额外组件的优点。这使得它成为查询少量数据的小型桌面应用程序的不错选择。否则,我会考虑使用一个数据库来提高性能。 < P>这个问题似乎暗示了一个在线应用程序。在这种情况下,有几点建议:
- 数据可以/应该压缩。我想它会压缩得很好
- 可能数据可以跨多个会话进行缓存,也可能作为html内容交付,并根据需要指定缓存到期日期。这将节省系统加载,如果数据不经常更新,这可能是可行的
- 建议功能最初可能会被禁用(即,当应用程序异步初始化缓存时,显示“加载…”消息)。以这种方式,应用程序将在启动时快速可用,即使建议功能可能会延迟30秒左右