わかりましたので、.txtファイルを読み取って、個別の単語を数えることができるC#コンソールアプリがあります..そしてそれは機能します..しかし、ファイル内のすべての個別の単語を100MBで読み取りますファイルは何日もかかります..私が望むのは、ファイルを一度読んで、すべての異なる単語を数えることです。これまでのアプリの一部を次に示します。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
using System.Data;
using System.IO.MemoryMappedFiles;
namespace CompressionApp
{
class Program
{
static void Main(string[] args)
{
//read all text
string FilePath = (@"D:\Test\testing.txt");
string FullText;
using (StreamReader streamReader = new StreamReader(FilePath))
{
FullText = streamReader.ReadToEnd();
}
FileInfo Info = new FileInfo(FilePath);
int FileSize = Convert.ToInt32(Info.Length);
//some code
string[] Words = FullText.Split(' ');
var DistinctWords = new List<string>(Words.Distinct());
//some code
int P = 0;
int ID = 0;
int Length = 0;
int ByteWorth;
double Perc;
double PPerc = 0;
bool display = false;
using (var mappedFile1 = MemoryMappedFile.CreateFromFile(FilePath))
{
using (Stream mmStream = mappedFile1.CreateViewStream())
{
using (StreamReader sr = new StreamReader(mmStream, ASCIIEncoding.ASCII))
{
Parallel.ForEach(DistinctWords, new ParallelOptions { MaxDegreeOfParallelism = 1 }, Word =>
{
DataRow dr = dt.NewRow();
string SearchTerm = Word;
var MatchQuery = from word in Words
where word == SearchTerm
select word;
int WordCount = MatchQuery.Count();
Length = SearchTerm.Length;
if (Length > 1)
{
if (WordCount > 1)
{
ID = ID + 1;
ByteWorth = (Length * 8) * WordCount;
dr["Word"] = SearchTerm;
dr["Count"] = WordCount;
dr["ID"] = ID;
dr["Length"] = Length;
dr["ByteWorth"] = ByteWorth;
dt.Rows.Add(dr);
}
}
//some code below
これはこれまでのところ完全なアプリです...あまりきれいではありません。しかし、私はコーディングが初めてです。
ヒント、ヒント、提案は大歓迎です。