0

Excelファイルから読み書きするac#.netアプリケーションがあります。私の検索では、各ファイルの 20 個のセルのデータを比較するため、10000 個のファイルを検索すると 70 秒かかります。これは非常に長いです。それをより速くするためのより良い解決策のアイデア。読み取り関数は次のとおりです。

 public static void OpenExcel(string fileName, bool visibility, FunctionToExecute fn = null)
    {
        string addInPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft\\AddIns\\mDF_XLcalendar.xla");

        deleg = fn;
        app = new Excel.Application();

        app.Workbooks.Open(addInPath);
        app.Workbooks.Open(fileName);

        app.ScreenUpdating = true;
        app.DisplayAlerts = true;
        app.Visible = visibility;
        app.UserControl = true;
        app.WindowState = Excel.XlWindowState.xlMaximized;

        EventDel_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeCloseEventHandler(application_WorkbookBeforeClose);
        EventSave_BeforeBookClose = new Excel.AppEvents_WorkbookBeforeSaveEventHandler(Open_ExcelApp_WorkbookBeforeSave);

        app.WorkbookBeforeClose += EventDel_BeforeBookClose;
        app.WorkbookBeforeSave += EventSave_BeforeBookClose;

    }

検索を行うコードは次のとおりです。

string searchString = ((RichTextBox)searchObject.LstObject[0]).Text.Trim();

            bool contain = ExcelFunctions
                                .RemoveDiacritics(ExcelFunctions.Read(GetSummaryXl, coord))
                                .ToLower()
                                .Contains(ExcelFunctions.RemoveDiacritics(searchString).ToLower());

            return string.IsNullOrEmpty(searchString) || (!string.IsNullOrEmpty(searchString) && contain);

私は多くのテストを行いましたが、私の読み取り機能は 1 つのファイルで検索時間の 90% を費やしているようです。

4

3 に答える 3

0

私があなただったら、マルチスレッディングを好むでしょう。確かに大量の CPU を使用しますが、シングル スレッドに比べて x 倍高速です。

これはよく説明されたマルチスレッドのチュートリアルで、使いやすいです!

于 2013-10-01T17:03:27.020 に答える