使用visual studio进行调试:程序在执行重循环时崩溃

时间:2010-01-26 17:46:43

标签: c# visual-studio compact-framework remote-debugging

我目前正在尝试提取使用GZip压缩的文件。 我想在使用Windows Mobile 6的移动设备上进行programmaticaly。 我使用Compact Framework 3.5和C#。

压缩文件大小约为4 MB。并且原始文件(文本文件)的大小约为42 MB。 我的算法在提取过程中崩溃了。每次解压缩文件大小达到大约33.2 MB时崩溃。

我的算法因文件大小限制而崩溃了吗? 我知道紧凑框架的内存限制大约为32 MB,但不应该满足此内存限制,因为我使用缓冲区来提取文件。 我是对的吗?

以下是算法:

private void Extract(string GZippedFile, string TargetFile)
{
  int BUFFER_SIZE = 32768;

  using (FileStream InStream = new FileStream(GZippedFile, FileMode.Open, FileAccess.Read))
  {
    using (GZipStream GZipStream = new GZipStream(InStream, CompressionMode.Decompress))
    {
      using (FileStream OutStream =
        new FileStream(TargetFile, FileMode.Create, FileAccess.Write))
      {
        byte[] tempBytes = new byte[BUFFER_SIZE];
        int i;
        while ((i = GZipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
        {
          OutStream.Write(tempBytes, 0, i);
        }
      }
    }
  }
}

此外,通常,在Windows Mobile上达到内存限制时,会显示系统消息。当程序崩溃时,情况并非如此。

此外,设备上还有足够的存储空间和程序存储空间(通过设置>>系统内存显示)。

你有什么想法吗?

编辑:抱歉,我认为我错了。实际上,只有当我使用Visual Studio调试程序时才会出现此问题。我正在使用TCp / Connect链接Visual Studio和我的设备。

我认为真正的问题如下:

  • 文件提取占用了大量的设备资源;

  • 因为设备太忙,无法维护与Visual Studio的tcp连接;

  • Visual Studio和设备之间的连接丢失,这会导致整个程序崩溃,而不会在设备上向用户发出任何警告(在运行Visual Studio的PC上,会显示一条消息,警告连接丢失了。

当我不使用visual studio调试器时,一切正常。

编辑: 由于ctackle评论,问题不再出现。 提示是执行

System.Threading.Thread.Sleep(1);

此指令在循环期间为visual studio提供句柄,并防止程序崩溃。

1 个答案:

答案 0 :(得分:-1)

也许考虑使用第三方工具?

http://www.icsharpcode.net/OpenSource/SharpZipLib/