Mat*_*tgb 7 delphi delphi-2010
我有一个预先面试的任务,我已经完成并且解决方案有效,但是由于使用了TADODataset,我被标记了并没有接受采访.我基本上导入了一个填充数据集的CSV文件,数据必须以特定的方式处理,所以我使用数据集的过滤和排序来确保数据按我想要的方式排序然后我做了while循环中的逻辑处理.收到的反馈说这很糟糕,因为对于大文件来说这会很慢.
我的主要问题是,如果使用内存数据集处理大型文件的速度很慢,那么从csv文件访问信息的方法就更好了.我应该使用字符串列表还是类似的东西?
小智 5
这实际上取决于任务的“大”和可用资源(在这种情况下为 RAM)。
“收到的反馈说这很糟糕,因为它对于大文件来说会很慢。”
CSV 文件通常用于移动数据(在大多数情况下,我遇到的文件是 ~1MB+ 到 ~10MB,但这并不是说其他人不会以 CSV 格式转储更多数据)而不必担心(如果在all)关于导入/导出,因为它非常简单。
假设你有一个 80MB 的 CSV 文件,现在这是一个你想要分块处理的文件,否则(取决于你的处理)你可以吃数百 MB 的 RAM,在这种情况下我会做的是:
while dataToProcess do begin
// step1
read <X> lines from file, where <X> is the max number of lines
you read in one go, if there are less lines(i.e. you're down to 50 lines and X is 100)
to process, then you read those
// step2
process information
// step3
generate output, database inserts, etc.
end;
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,你没有将 80MB 的数据加载到 RAM 中,而是只有几百 KB,其余的用于处理,即链表、动态插入查询(批量插入)等。
“……然而,由于使用了 TADODataset,我被降级并没有得到面试。”
我并不感到惊讶,他们可能想看看您是否能够创建算法并当场提供简单的解决方案,但不使用“现成的”解决方案。
他们可能正在考虑看到您使用动态数组并创建一个(或多个)排序算法。
“我应该使用字符串列表或类似的东西吗?”
回应可能是一样的,同样,我认为他们想看看你是如何“工作”的。