Как выполнять файловые операции быстрее без исключений? - PullRequest
0 голосов
/ 21 ноября 2011

Я разработал приложение для выполнения некоторых операций с внутренним файлом для моего проекта.

Приложение запишет двоичный файл и выполнит в нем некоторые действия, что приведет к созданию другого файла.Затем я прочитаю выходной файл для обновления своей базы данных.

Например, рассмотрим, напишу ли я ABC.bin файл, а выходной файл будет XYZ.bin

Все вышеупомянутыедействия будут выполнены за 10 миллисекунд.И я продолжу один и тот же процесс несколько раз, например 100 раз.

Теперь проблема в том, что я получаю некоторые исключения, такие как файл не найден, доступ запрещен при запуске моего приложения из источникаcode.

Но я не получаю те же исключения после создания приложения в виде исполняемого файла (.exe).

Что происходит в обоих случаях?Почему то же самое не происходит после создания его в виде исполняемого файла?

1 Ответ

1 голос
/ 21 ноября 2011

Мало что можно сделать:

  • если вы видите исключения только в режиме отладчика, а не при запуске автономного исполняемого файла, проверьте настройки исключений в Visual Studio. Перейдите на Debug -> Exceptions ... и убедитесь, что все в Thrown не проверено

  • выяснить, будет ли быстрее запрашивать, существует ли файл, используя File.Exists метод перед началом копирования (это, конечно, решение только для FileNotFoundException)

  • обернуть копирующий цикл внутри блока try-catch вместо переноса кода, который находится внутри цикла. Вот так:

    List<string> fileNames = new List<string>() { "file1.txt", "file2.txt", ... };
    int i = 0;
    try
    {
        for (i = 0; i < fileNames.Count; i++)
            // do copying here
    }
    catch (Exception ex)
    {
      // log exception
    }
    // You can decide if to return to copying rest of the files here, from i+1
    

Все это делается для того, чтобы не входить и не выходить из блока try для каждого файла, который имеет свою стоимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...