C# 为什么当文件变大时我的内存会耗尽?

C# 为什么当文件变大时我的内存会耗尽?,c#,.net,wpf,winforms,cryptography,C#,.net,Wpf,Winforms,Cryptography,所以我得到的错误是这个 发生“System.OutOfMemoryException”类型的未处理异常 在mscorlib.dll中 我以前从未遇到过这个错误,我在谷歌上查过。 我有一个64位系统。 我有16GB的内存。 有人说我需要在我的项目属性中将平台目标设置为x64,但这会不会使得只有64位系统才能运行此应用程序 public static string RC4(string input, string key) { StringBuilder result = new Strin

所以我得到的错误是这个

发生“System.OutOfMemoryException”类型的未处理异常 在mscorlib.dll中

我以前从未遇到过这个错误,我在谷歌上查过。
我有一个64位系统。
我有16GB的内存。

有人说我需要在我的项目属性中将平台目标设置为x64,但这会不会使得只有64位系统才能运行此应用程序

public static string RC4(string input, string key)
{
    StringBuilder result = new StringBuilder();
    int x, y, j = 0;
    int[] box = new int[256];

    for (int i = 0; i < 256; i++)
    {
        box[i] = i;
    }

    for (int i = 0; i < 256; i++)
    {
        j = (key[i % key.Length] + box[i] + j) % 256;
        x = box[i];
        box[i] = box[j];
        box[j] = x;
    }

    for (int i = 0; i < input.Length; i++)
    {
        y = i % 256;
        j = (box[y] + j) % 256;
        x = box[y];
        box[y] = box[j];
        box[j] = x;

        result.Append((char)(input[i] ^ box[(box[y] + box[j]) % 256]));
    }
    return result.ToString(); //This would be the line throwing me the error.
}
公共静态字符串RC4(字符串输入,字符串键)
{
StringBuilder结果=新建StringBuilder();
int x,y,j=0;
int[]框=新int[256];
对于(int i=0;i<256;i++)
{
框[i]=i;
}
对于(int i=0;i<256;i++)
{
j=(键[i%key.Length]+框[i]+j)%256;
x=框[i];
框[i]=框[j];
盒[j]=x;
}
for(int i=0;i
因为每秒钟我都会从键盘挂钩向文本文件添加新文本。所以让我们假设我在第一秒钟输入abc,它将附加它,现在如果我在下一秒钟输入def,它将附加它。这一切都发生在一个计时器的滴答声中,所以它真的很简单。
每当文本文件达到350000KB左右时,它就会抛出这个错误。

即使在x64上,单个对象的允许大小也有限制。实际限制并不重要,取决于配置,但结果是,当处理大量数据时,您应该逐块读取数据(通常通过
),一次处理数据块。永远不要试图一次记住整个事情。这同样适用于输入和输出


现在,如果您成功地将整个内容加载到
input
,那么您就幸运了;但是
StringBuilder
故意过大,因此它不必一直保持分配。通过告诉
StringBuilder
构造函数中所需的正确字符数,您可能能够“修复”代码,但这只是一种临时的黑客行为,它将允许您处理稍大的数据。真正的解决办法是不要试图在单个数据块中处理大量数据。

请在将输入字符串写入文件的地方共享您的代码。不要将RC4用于生产代码,它已经几十年没有成为一种安全的加密方法。使用AES(高级加密标准)。当使用RC4算法时,我有点担心,我立即发现它生成了很多WAAAY,你会推荐其他加密方法吗?something简单安全。@JohnS.Washington RC4是一种流密码;正确使用(流式传输,而不是一次全部使用),应该可以。不使用RC4的主要原因是因为它有多个已知的漏洞。是的,我也了解到了这一点,你还有什么建议更安全吗?@JohnS.Washington我不愿意提出积极的安全建议;只有负面的:)如果您描述了您的用例,那么更容易具体化,但请看一下AES加密。