C#数据结构问题(要使用哪个集合?)

C#数据结构问题(要使用哪个集合?),第1张

概述我需要实现一个大的Widget对象集合,每个对象都包含一个唯一的文件路径字符串(“FilePath”).我需要能够做到以下几点: >根据文件路径快速检索Widget对象 >更改Widget的文件路径而不创建新对象(多个其他对象可能包含对单个Widget的引用,并且跟踪它们会影响性能) >给定Widget参考,确定它的文件路径 我首先想到使用文件路径作为键来使用通用的SortedList,但是复制数 我需要实现一个大的Widget对象集合,每个对象都包含一个唯一的文件路径字符串(“filePath”).我需要能够做到以下几点:

>根据文件路径快速检索Widget对象
>更改Widget的文件路径而不创建新对象(多个其他对象可能包含对单个Widget的引用,并且跟踪它们会影响性能)
>给定Widget参考,确定它的文件路径

我首先想到使用文件路径作为键来使用通用的SortedList,但是复制数千个对象的路径可能会很快占用内存.我考虑从对象中删除路径并仅将其存储在密钥列表中,但这会使上面的要求3难以实现.

我现在倾向于滚动从List<>派生的我自己的类.以排序顺序添加Widget对象,并使用二进制搜索检索它们.只需从列表中删除一个对象,更改它的文件路径,然后将其添加回列表,即可完成要求2.

但我对C#比较陌生,我想在这里检查一下好心人,看看我是否错过了另一个明显的解决方案.

谢谢!

解决方法 “复制”字符串不会使用两倍的内存:由于字符串是c#中的不可变对象,因此您只需在字典中的每个条目中存储另一个引用(即指针,4或8个字节):

Dictionary<string,Widget> dict = new Dictionary<string,Widget>();Widget myWidget = GetSomeWidget();dict.Add(myWidget.name,myWidget);

您将始终重用窗口小部件属性中的字符串对象,因此只需继续使用dict并将路径作为属性存储在窗口小部件中.

如果您不需要按排序顺序枚举小部件,请不要使用SortedList,它将比Dictionary更慢(O(n log n)插入/删除/检索与O(n)平均时间相比)

更改窗口小部件的路径将需要您从字典中删除它并使用更改的路径添加它,但这是一个平均的恒定时间 *** 作,所以它应该非常快.

而且还要提一下:即使您需要花费一MB的额外内存来获得更高的性能或使用更适合(且经过良好测试的)数据结构,我也不认为这会是一个很大的问题.这些天其他应用程序正在使用的内存量(浪费?)

总结

以上是内存溢出为你收集整理的C#数据结构问题(要使用哪个集合?)全部内容,希望文章能够帮你解决C#数据结构问题(要使用哪个集合?)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存