我有一个预先面试的任务,我已经完成并且解决方案有效,但是由于使用了TADODataset,我被标记了并没有接受采访.我基本上导入了一个填充数据集的CSV文件,数据必须以特定的方式处理,所以我使用数据集的过滤和排序来确保数据按我想要的方式排序然后我做了while循环中的逻辑处理.收到的反馈说这很糟糕,因为对于大文件来说这会很慢.
我的主要问题是,如果使用内存数据集处理大型文件的速度很慢,那么从csv文件访问信息的方法会更好.我应该使用字符串列表还是类似的东西?
解决方法
它实际上取决于任务的“大”和可用资源(在本例中为RAM).
“收到的反馈说这很糟糕,因为对于大型文件来说这很慢.”
CSV文件通常用于移动数据(在大多数情况下,我遇到的文件大约是1MB到10MB,但这并不是说其他人不会以CSV格式转储更多数据)而不用担心太多(如果在所有)关于进口/出口,因为它非常简单.
假设您有一个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;
在上面的例子中,你没有将80MB的数据加载到RAM中,而只加载几百KB,其余的用于处理,即链接列表,动态插入查询(批量插入)等.
“……但由于使用了TADODataset,我被标记下来并没有接受采访.”
我并不感到惊讶,他们可能正在寻找您是否有能力创建算法并在现场提供简单的解决方案,但不使用“现成的”解决方案.
他们可能会考虑使用动态数组并创建一个(或多个)排序算法.
“我应该使用String Lists还是类似的东西?”
回应可能是相同的,我认为他们想看看你的“工作”方式.