c++ - 在 C++ 中复制列信息

标签 c++ database performance struct copy

我必须将列信息从数据库复制到结构,问题是它需要 5000 多次迭代并且非常慢。有没有更好的办法?

使用的代码在.h文件中:

struct sFieldDef
{
CString m_strQualifier;
CString m_strOwner;
CString m_strTableName;
CString m_strColumnName;
int  m_nDataType;
CString m_strTypeName;
long m_lPrecision;
long m_lLength;
int m_nScale;
int m_nRadix;
int m_nNullable;
};

.cpp文件中使用的代码:

sFieldDef sTempField;
CColumns rsColumns(m_pDatabase);
rsColumns.Open(CRecordset::snapshot);

while( !rsColumns.IsEOF() )
{
sTempField.m_strQualifier=rsColumns.m_strQualifier;
sTempField.m_strOwner=rsColumns.m_strOwner;
sTempField.m_strTableName=rsColumns.m_strTableName;
sTempField.m_strColumnName=rsColumns.m_strColumnName;
sTempField.m_nDataType=rsColumns.m_nDataType;
sTempField.m_strTypeName=rsColumns.m_strTypeName;
sTempField.m_lPrecision=rsColumns.m_lPrecision;
sTempField.m_lLength=rsColumns.m_lLength;
sTempField.m_nScale=rsColumns.m_nScale;
sTempField.m_nRadix=rsColumns.m_nRadix;
sTempField.m_nNullable=rsColumns.m_nNullable;
pArrFiels->Add(sTempField);
rsColumns.MoveNext();
}

最佳答案

您似乎将所有内容复制并存储在结构数组中,其中每个结构都具有相同的成员和相应的记录。通常我们通过迭代器来使用数组。那么为什么不为您的记录集提供一个迭代器并避免完全复制呢?你可以大致这样开始:

template <typename RS>
class rs_iterator
{
   RS& rs;
public:
   rs_iterator(RS& rs) : rs{rs} { }
   const RS& operator*() { return rs; }
   rs_iterator& operator++() { return rs.MoveNext(), *this; }
   // ...
}

因此,您不仅可以为类似数组的数据源(如记录集)提供方便且标准的接口(interface),还可以直接在需要双向迭代器的类似 STL 的算法中使用它。

如果您的 CRecordset 支持随机访问,那么您的迭代器也很容易支持。否则,随机访问提供本身就是复制的一个很好的理由(例如,对列进行排序)。

关于c++ - 在 C++ 中复制列信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22532299/

相关文章:

php - session::flash 和 request->session->flash 的 laravel 区别

c++ - 如何将来自 std::vector<short> 的数据存储在 std::vector<uint8_t> 中

c++ - 无法将函数定义与类模板的现有声明相匹配

java - 使用查询语言与 Java 来确定信息

PHP + pthreads : Build one big object - parallel-processing

scala - Spark RDD : multiple reducebykey or just once

c++ - boost::split 仅当 C++ 中存在分隔符时才进行拆分

c++ - Windows 7 上的 C++ 程序中的链接器错误

database - 类图之于程序就像________之于数据库?

python - 在 django 中管理 redis 连接的正确方法