Cải thiện hiệu suất Excel


3

Tôi có một máy Windows 8 CPU 3GHz được ước tính để hoàn thành một phép tính bằng Excel trong 16 ngày dựa trên thử nghiệm dữ liệu mẫu. Hiệu suất này không được chấp nhận (!).

Tính toán không sử dụng các khả năng của Excel nhưng về cơ bản là tập lệnh VBA gọi một đối tượng COM có chức năng Máy tính.

Quá trình tính toán đang sử dụng 25% CPU và Excel đang sử dụng 1%. Bộ nhớ trao đổi dường như không được sử dụng. Vì quá trình đang đọc và ghi vào các tệp văn bản, tôi giả sử rằng nó có liên quan đến I / O. Số lượng đọc / ghi I / O được đếm liên tục trong quá trình tính toán.

Trình kiểm tra vi-rút được cài đặt, nhưng nó không tích cực kiểm tra. tức là CPU là 0% trong suốt thời gian tính toán.

Đề xuất tốt nhất cho đến nay, là sử dụng đĩa RAM.

Bạn có thể đề nghị bất kỳ con đường điều tra khác về nút cổ chai hiệu suất?

[Một lát sau...]

Rất cám ơn lời khuyên dưới đây. Về cơ bản Quy trình tính toán, là một Máy tính tài chính chuyên dụng nhưng như được đề cập dưới đây, có vẻ như nút cổ chai đang sử dụng nó thông qua COM. Phương pháp này đang loại bỏ tất cả các chức năng đa luồng được cung cấp bởi máy tính, cũng có thể được xử lý như một dịch vụ web.

Kịch bản trong thế giới thực có liên quan là cập nhật bảng tài chính ba năm một lần bằng Máy tính mới này. Thật không may, không đủ thời gian được dành cho sớm trong lịch trình ước tính hiệu suất, do đó dẫn đến sự khẩn cấp của việc điều tra vấn đề hiệu suất. Vì việc tính toán này không được thực hiện một cách thường xuyên, nên không có yêu cầu thiết lập một môi trường được tối ưu hóa cho tốc độ.

Giải pháp chính xác để loại bỏ Excel và viết một bộ điều phối đa luồng cho Calcualtor là rõ ràng nhưng chúng tôi hiện đang tìm kiếm một cách giải quyết khác là chúng tôi thực hiện các phép tính trong một khoảng thời gian hợp lý.


Sẽ tăng mức độ ưu tiên của các quy trình liên quan đến trợ giúp (thông qua Trình quản lý tác vụ)?
Khóa Matthew

Câu trả lời:


4

Bạn đang sử dụng 25% CPU vì đối tượng COM là luồng đơn và không sử dụng các lõi khác của CPU. Bạn không thể tăng hiệu suất tính toán của mình mà không sửa đổi mã đối tượng COM.

Lấy làm tiếc.


Nó có giúp tạo ra nhiều phiên bản của đối tượng COM / và hoặc Excel và hy vọng hệ thống lên lịch cho nó trên nhiều CPU không?
Khóa Matthew

Tôi tập hợp dữ liệu có thể được phân chia giữa các trường hợp khác nhau mà nó sẽ hoạt động.
Ignacio Soler Garcia

1
@Matthew: Nếu bạn định làm điều đó, tôi nghĩ bạn sẽ tốt hơn nếu tìm hiểu các giải pháp khác, chẳng hạn như môi trường lập trình / tính toán thích hợp (như những gì Wil đề xuất)
Josh Hunt

1
@joshhnut: stuart nói rằng công cụ Excel (thực ra là công cụ VBA) chỉ gọi một đối tượng COM, vì vậy công cụ được sử dụng để thực hiện cuộc gọi này không liên quan vì các tính toán được thực hiện bởi đối tượng COM. Hãy nhớ rằng VBA và VB6 chia sẻ ít nhiều cùng một công cụ.
Ignacio Soler Garcia

9

Nói một cách đơn giản, không sử dụng Excel cho loại điều này. Bạn có thể xem Dịch vụ Excel (bổ trợ cho SharePoint) có nghĩa là xử lý giảm tải, tuy nhiên tôi không có kinh nghiệm với nó.

Nếu bạn đang làm một việc gì đó phức tạp, bạn thực sự muốn xem xét các công cụ toán học nghiêm túc có thể mở rộng ra các môi trường đa CPU - Tuy nhiên, tôi thậm chí sẽ không biết bắt đầu từ đâu mà không biết bạn đang cố gắng đạt được điều gì.

Một số điều cần xem xét bao gồm SageMath , MATLABMathematica , trong số NHIỀU người khác.


1
+1 Matlab là một công cụ tuyệt vời, nhưng cũng có thể nhiều ngôn ngữ lập trình mục đích chung cũng sẽ phù hợp (và miễn phí sử dụng). Ngoài ra, có lẽ rất nhiều thời gian CPU ở đây chỉ đơn giản là làm mới Excel những gì được hiển thị trên màn hình sau mỗi bước.
sblair

@sblair không thể đồng ý nhiều hơn. Điều đầu tiên xuất hiện trong đầu là lớp vỏ tương tác của Python khi tôi thấy câu hỏi này thực sự.
John T

4

Một điều cần làm có lẽ là tìm ra cách tốt hơn để triển khai phần mềm của bạn, sử dụng các công cụ phù hợp hơn với tính toán hiệu suất hoặc thậm chí là ngôn ngữ / khung dành riêng cho miền vấn đề của bạn. Nhiều công cụ hiện có, ví dụ Mathicala, SAS, R, và trên và trên. Ngoài ra, bạn nên song song nó càng nhiều càng tốt.

Ngoài ra, tránh sử dụng đĩa càng nhiều càng tốt. Nếu bạn định sử dụng đĩa, ngoài các đĩa RAM, bạn nên cân nhắc sử dụng mảng đột kích hiệu suất cao như RAID 10, hoặc thậm chí tốt hơn là RAID 10 gồm SSD.

Bạn nên lập hồ sơ cho quá trình của mình trong khi nó chạy và xem thời gian hệ thống là bao nhiêu và thời gian của người dùng là bao nhiêu. Tôi sẵn sàng đặt cược rằng phần lớn thời gian thực hiện đang chiếm các cuộc gọi hệ thống để thực hiện tất cả I / O đĩa đó. Gạt nó ra.


0

Bạn chỉ cần Trình quản lý tác vụ:

Chuyển đến tab Quy trình, sau đó chọn menu Xem / Chọn Cột và kiểm tra một hoặc tất cả:

  • Sử dụng CPU (cho tỷ lệ phần trăm của tổng số CPU đang sử dụng)
  • Bộ nhớ - Bộ làm việc (bộ nhớ đang sử dụng)
  • i / O Đọc + I / O ghi (đếm tổng số lần truy cập đĩa được thực hiện)

Sau đó, bạn có thể nhấp hai lần (không nhấp đúp) vào một cột để sắp xếp theo thứ tự các giá trị giảm dần, để kiểm tra mức độ sử dụng quá mức.

Tuy nhiên, nếu sự cố nằm trong đối tượng ActiveX, thì tối ưu hóa Excel sẽ không giúp ích gì cả.


0

Như những người khác đã đề cập, bạn nên điều tra việc di chuyển quá trình xử lý của bạn khỏi Excel. Các đối tượng VBA và COM không hiệu quả trong việc thực hiện nhiều thao tác qua lại.

Cá nhân tôi có xu hướng gửi dữ liệu của mình đến máy chủ SQL và viết truy vấn tại đó. Truy vấn / thủ tục của bạn có thể thực hiện các tính toán của nó và cung cấp đầu ra cho Excel bằng kết nối bên ngoài.

Các giải pháp RDBMS khá hiệu quả trong việc thực hiện những điều mà tôi sẽ không bao giờ mơ ước được thực hiện trong Excel hoặc VBA, làm việc dễ dàng với cơ sở dữ liệu nhiều GB và nhiều chủ đề mà bạn có thể có trong tay.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.