में बड़ी फ़ाइलों को प्रसंस्करण करना मेरे पास एक 4 जीबी फ़ाइल है जिसे मैं बाइट आधारित खोज और प्रतिस्थापित करना चाहता हूं। मैंने ऐसा करने के लिए एक सरल कार्यक्रम लिखा है लेकिन इसे केवल एक ढूंढने और बदलने के लिए बहुत लंबा (90 मिनट +) लगता है। मैंने कोशिश की कुछ हेक्स संपादकों को कार्य को 3 मिनट से कम समय में कर सकते हैं और संपूर्ण लक्ष्य फ़ाइल को स्मृति में लोड नहीं कर सकते हैं। क्या कोई ऐसी विधि जानता है जहां मैं वही काम कर सकता हूं? यहाँ मेरे वर्तमान कोड है:सी #
public int ReplaceBytes(string File, byte[] Find, byte[] Replace)
{
var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite);
int FindPoint = 0;
int Results = 0;
for (long i = 0; i < Stream.Length; i++)
{
if (Find[FindPoint] == Stream.ReadByte())
{
FindPoint++;
if (FindPoint > Find.Length - 1)
{
Results++;
FindPoint = 0;
Stream.Seek(-Find.Length, SeekOrigin.Current);
Stream.Write(Replace, 0, Replace.Length);
}
}
else
{
FindPoint = 0;
}
}
Stream.Close();
return Results;
}
ढूंढें और प्रतिस्थापित के साथ जिस तरह से 4Gb "फ़ाइल" की तुलना में अपेक्षाकृत छोटे हैं। मैं आसानी से देख सकता हूं कि मेरा एल्गोरिदम धीमा क्यों है लेकिन मुझे यकीन नहीं है कि मैं इसे बेहतर कैसे कर सकता हूं।
सबसे पहले, एक समय में 1 से अधिक बाइट पढ़ें। – SLaks
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm – SLaks