如果您需要能够存储大量内存的纯文本,因此它可以被搜索和编辑,你会用什么样的数据类型?存储大量文本的内存
比方说,我将一个10000行文档加载到我的C#应用程序中以便用LINQ进行搜索,您将如何在内存中表示它?
不是字符串,因为它有是可变的,字符串是不可变的。
如果您需要能够存储大量内存的纯文本,因此它可以被搜索和编辑,你会用什么样的数据类型?存储大量文本的内存
比方说,我将一个10000行文档加载到我的C#应用程序中以便用LINQ进行搜索,您将如何在内存中表示它?
不是字符串,因为它有是可变的,字符串是不可变的。
你总是可以使用一个MemoryStream,然后使用一个StreamReader从内存中读取数据。
你可能会从下面的链接中得到一些提示,说明如何在StreamReader中使用LINQ。我不确定它是否与你想要做的完全吻合。
http://blogs.msdn.com/ericwhite/archive/2006/08/31/linq-to-text-files.aspx
从博客文章:
StreamReader sr = new StreamReader("TextFile.txt");
var t1 =
from line in sr.Lines()
let items = line.Split(',')
where ! line.StartsWith("#")
select String.Format("{0}{1}{2}",
items[1].PadRight(16),
items[2].PadRight(16),
items[3].PadRight(16));
var t2 =
from line in t1
select line.ToUpper();
foreach (var t in t2)
Console.WriteLine(t);
sr.Close();
你想要的StreamReader的实例更改为类似
StreamReader sr = new StreamReader(myMemoryStreamVar)
或类似的东西。
你可以用LINQ查询内存中的数据吗? –
将StreamReader附加到MemoryStream时,可以使用ReadToEnd()方法将整个内存流读出为一个字符串,然后对其进行搜索。你会遇到一些问题,试图使用内置的.NET的东西来做高性能,高负载的字符串操作。自己编写搜索例程以搜索内存流可能会更好。另外,如果您正在从磁盘读取数据,则不必一次将其全部读入内存。流读取器可以从磁盘读取块中的数据以减少内存使用量。 –
刚刚添加了一篇博客文章的链接,该链接描述了一种扩展方法技术,该技术允许您使用LINQ来搜索大型文本文件,而无需将整个文件加载到内存中。它使用我建议的StreamReader技术,但有一个实际的代码示例,我更新了包含的答案。这是一种使用LINQ搜索文本文件的非常简洁的方式。强烈推荐。 –
Stringbuilder会适合。在内部它是一个缓冲区,并且是可变的。
和性能明智,这是一个可行的选择? –
如果你做得很好,应该是。关键是要在stringbuilder的内部char []上进行搜索,所以你不会做大量的字符串alloc/deallocs来做搜索。这是我认为你可能会遇到的唯一问题,即由Brian提供的streamreader/memory stream选项。 –
尝试使用内存映射文件。它是.net 4.0中的新BCL。
这里的链接。 http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile(VS.100).aspx
由于
StringBuilder的使用堆内存分配,这可能导致在内存不足异常在运行时。
谢谢
添加了文本,搜索和linq标记。希望这将有助于让更多专业知识的人员了解如何完成您期望的任务。 –
列表是相当易变的。 –