Bài này mình post vào mục lập trình nhưng không có quyền nên post tạm đây vậy.
Lập trình hiệu năng viên ngọc của tư duy lập trình
Câu hỏi
Trong các tệp Excel quản lý thông tin, quản lý kho hàng, tiêu thụ hay bất cứ vấn đề gì của tôi khi mới lập thì chạy rất tốt. Nhưng ngày nào đó, tự nhiên tốc độ tính toán chậm như rùa bò. Khi nhập dữ liệu vào 1 cell rồi enter thì tại thanh statusbar cứ hiện từng % tính toán rất chậm. Tôi phải bỏ chế độ tính tự động thì hết nhưng không refresh được các ô công thức. Không riêng trường hợp kích thước tệp tin quá lớn mà cả khi tôi chép thang2 sang thang3 rôi xóa hết phát sinh chỉ để Danh mục hàng thì hiện tượng này vẫn có. Nhờ chỉ giùm lý do và cách xử lý lỗi này.
Trả lời
Nếu bạn xài excel 2003, giới hạn lý thuyết là 65,536 dòng và 256 cột. Nhưng thực tế khi dữ liệu lên đến 5,000 dòng là máy bắt đầu cà giựt rồi. Mình nghĩ file của bạn hồi mới thì dữ liệu còn ít nên nó chạy ngon/nhanh. Nhưng càng về sau dữ liệu càng nhiều, càng ì ạch là chuyện thường tình.
Vấn đề này cũng có thể do bạn lập trình hay sử dụng các công thức chưa được hiệu năng.
Các công thức sau sẽ làm cho bạn xử ly chậm đi và tạo một rủi ro lớn trong các liên kết
Treo máy
Excel bị đứng
Nếu muốn giải quyết triệt để vấn đề về tối ưu tốc độ bạn phải phối hợp nhiều ngôn ngữ như VB, DosBatch, C Sharp, VBS, … Đặc biệt ở mức cao là phải biết tinh giản code và luôn tính đến yếu tố hiệu năng. Ngoài ra, lập trình hiệu năng thuật toán phải sử dụng cấu trúc phân tán, tránh các vòng lặp các hàm đệ quy không cần thiết, các quá trình giải phóng bộ nhớ. Quá trình lập trình hiệu năng là mức thượng thừa trong lập trình rồi. Quá trình làm việc và sự tinh tế , sáng tạo của bạn sẽ cho bạn nhưng kinh nghiệm đó chứ sách vở chỉ có thể khái quát hóa vấn đề chứ các mức tinh tế riêng biệt thì bạn phải vào thực tế mới nhận ra được. Thông thường người lập trình chỉ chú ý đến thực hiện được và giải quyết được vấn đề chứ không hề để ý đến vấn đề này. Bài toán chỉ xuất hiệu khi khi tính toán liên tục ở tần suất lớn, liên tục, các thực hiện các phép tính phức tạp. Chưa kể khi bạn thực hiện xử lý với khối lượng dữ liệu lớn và vượt quá mức bộ nhớ đệm của Excel cũng như công thức thuộc dạng quản lý mảng riêng biệt sẽ làm cho chương trình của bạn bị treo và đứng lại ngay. Trên đây là những tóm tắt mà mình đã đã trải qua và lập trình xử lý những vấn đề này. Để đạt được vấn đề trên bạn sẽ thấy mình không bị khống chế bởi công nghệ vì nếu xử lý các vấn đề lớn, dữ liệu nhiều mà thực hiện trên máy tính bình thường là một sự thể hiện tính uyển chuyển, hiểu thấu đáo để tăng tốc quá trình xử lý mà dường như chúng ta chỉ nghĩ rằng chỉ làm được trên máy tính siêu lớn hoặc không thể thực hiện được trên một ngôn ngữ đơn giản nào đó. Ví dụ như ngôn ngữ Dos batch mà thực hiện thì rất nhanh chóng nhưng cũng ít ai để ý bởi vì ai cũng theo cái mới chứ không hề để ý vấn đề hiệu năng.
Rongreu - NDP
Lập trình hiệu năng viên ngọc của tư duy lập trình
Câu hỏi
Trong các tệp Excel quản lý thông tin, quản lý kho hàng, tiêu thụ hay bất cứ vấn đề gì của tôi khi mới lập thì chạy rất tốt. Nhưng ngày nào đó, tự nhiên tốc độ tính toán chậm như rùa bò. Khi nhập dữ liệu vào 1 cell rồi enter thì tại thanh statusbar cứ hiện từng % tính toán rất chậm. Tôi phải bỏ chế độ tính tự động thì hết nhưng không refresh được các ô công thức. Không riêng trường hợp kích thước tệp tin quá lớn mà cả khi tôi chép thang2 sang thang3 rôi xóa hết phát sinh chỉ để Danh mục hàng thì hiện tượng này vẫn có. Nhờ chỉ giùm lý do và cách xử lý lỗi này.
Trả lời
Nếu bạn xài excel 2003, giới hạn lý thuyết là 65,536 dòng và 256 cột. Nhưng thực tế khi dữ liệu lên đến 5,000 dòng là máy bắt đầu cà giựt rồi. Mình nghĩ file của bạn hồi mới thì dữ liệu còn ít nên nó chạy ngon/nhanh. Nhưng càng về sau dữ liệu càng nhiều, càng ì ạch là chuyện thường tình.
Vấn đề này cũng có thể do bạn lập trình hay sử dụng các công thức chưa được hiệu năng.
Các công thức sau sẽ làm cho bạn xử ly chậm đi và tạo một rủi ro lớn trong các liên kết
- Liên kết các sheets quá nhiều
- Sử dụng công thức mảng
- Sử dụng các vùng đặt tên quá nhiều
- Tạo các liên kết bên ngoài
- Công thức bị vòng lặp
- Quá trình xử lý có sử dụng bộ nhớ đệm nhiều như các thao tác Copy, tạo vùng tính đệm
- Vì tốc độ chậm có thể có nhiều lý do kể cả lý do phần cứng nữa.
- File excel nhiều lúc bị như vậy là do virus làm file lớn lên và dẫn đến chậm bạn có thể quét virus thử.
- Không nên quá lạm dụng Excel vào những công việc pro. Xét cho cùng, nó cũng chỉ là một trong những ứng dụng của Microsoft Office thôi, không phải phần mềm chuyên biệt.
Treo máy
Excel bị đứng
Nếu muốn giải quyết triệt để vấn đề về tối ưu tốc độ bạn phải phối hợp nhiều ngôn ngữ như VB, DosBatch, C Sharp, VBS, … Đặc biệt ở mức cao là phải biết tinh giản code và luôn tính đến yếu tố hiệu năng. Ngoài ra, lập trình hiệu năng thuật toán phải sử dụng cấu trúc phân tán, tránh các vòng lặp các hàm đệ quy không cần thiết, các quá trình giải phóng bộ nhớ. Quá trình lập trình hiệu năng là mức thượng thừa trong lập trình rồi. Quá trình làm việc và sự tinh tế , sáng tạo của bạn sẽ cho bạn nhưng kinh nghiệm đó chứ sách vở chỉ có thể khái quát hóa vấn đề chứ các mức tinh tế riêng biệt thì bạn phải vào thực tế mới nhận ra được. Thông thường người lập trình chỉ chú ý đến thực hiện được và giải quyết được vấn đề chứ không hề để ý đến vấn đề này. Bài toán chỉ xuất hiệu khi khi tính toán liên tục ở tần suất lớn, liên tục, các thực hiện các phép tính phức tạp. Chưa kể khi bạn thực hiện xử lý với khối lượng dữ liệu lớn và vượt quá mức bộ nhớ đệm của Excel cũng như công thức thuộc dạng quản lý mảng riêng biệt sẽ làm cho chương trình của bạn bị treo và đứng lại ngay. Trên đây là những tóm tắt mà mình đã đã trải qua và lập trình xử lý những vấn đề này. Để đạt được vấn đề trên bạn sẽ thấy mình không bị khống chế bởi công nghệ vì nếu xử lý các vấn đề lớn, dữ liệu nhiều mà thực hiện trên máy tính bình thường là một sự thể hiện tính uyển chuyển, hiểu thấu đáo để tăng tốc quá trình xử lý mà dường như chúng ta chỉ nghĩ rằng chỉ làm được trên máy tính siêu lớn hoặc không thể thực hiện được trên một ngôn ngữ đơn giản nào đó. Ví dụ như ngôn ngữ Dos batch mà thực hiện thì rất nhanh chóng nhưng cũng ít ai để ý bởi vì ai cũng theo cái mới chứ không hề để ý vấn đề hiệu năng.
Rongreu - NDP