小编nf3*_*743的帖子

QSqlQuery 内存问题。QSqlQuery::exec() 和 QSqlDatabase::open()/close();

我正在检查我制作的应用程序的内存使用情况。它多次调用从数据库(SQLite 3)读取和写入值。我观察到以下情况:

  • QSqlQuery::exec() 使用一些 KB 的 RAM 来执行给定的查询,但在超出范围后不会释放内存。

  • QSqlDatabase:: open() & close() 不能像文档建议的那样帮助释放资源。如果有的话,close() 会导致资源(至少是内存)“被困”在堆/堆栈上。

例如,这是我用来访问我的数据库的一段典型代码。

QStringList values;
db.open();
QString strQuery = "SELECT DISTINCT " + field + " FROM " + table + str;

QSqlQuery query(db);
query.prepare(strQuery);

if(query.exec() == true)
{
  while(query.next())
  {
    values.push_back(query.value(0).toString());
  }
}

db.close();
Run Code Online (Sandbox Code Playgroud)

经过试验,我发现下面的代码“陷阱”了更少的内存:

QStringList values;
QString strQuery = "SELECT DISTINCT " + field + " FROM " + table + str;

QSqlQuery query(strQuery, db);

  while(query.next())
  {
    values.push_back(query.value(0).toString());
  }
Run Code Online (Sandbox Code Playgroud)

但是,仍然没有释放少量内存。有没有其他人经历过这样的事情?

我可以一些如何释放这个记忆?

Ps 同样发生在这里,一些内存永远不会被释放:

db.open();
QSqlQuery query(db); …
Run Code Online (Sandbox Code Playgroud)

c++ sqlite qt

5
推荐指数
1
解决办法
6557
查看次数

C# - 将struct从一个对象传递到另一个对象

我正在尝试将结构从一个对象传递给另一个对象.我有以下代码:

    private void mainMenuStripNewProject_Click(object sender, EventArgs e)
    {
        frmNewProject frmNewProject = new frmNewProject(this);
        if (frmNewProject.ShowDialog() == DialogResult.OK)
        {
            StructProjectSettings tempProjectSettings = frmNewProject.getSettings();
            newProjectEvent(tempProjectSettings);                   //Fetchs settings from the new project form
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

错误14无法将类型'NathanUpload.frmNewProject.StructProjectSettings'隐式转换为'NathanUpload.Main.StructProjectSettings'o:\ daten\visual studio 2010\Projects\NathanUpload\NathanUpload\Main.cs 43

每个类中的结构都声明为公共类变量,并且是相同的.

我在这里先向您的帮助表示感谢!

c# struct

4
推荐指数
1
解决办法
2131
查看次数

C# - FTP检查/测试服务器

我想测试给定的IP和登录详细信息,以查看FTP服务器是否处于活动状态/详细信息是否正确.而已.

我在网上寻找解决方案,但似乎没有简单/雄辩,例如,使用Ping类ping并检查服务器.我有以下,但不起作用:

    static private void testConntecion()
    {
        FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://172.29.200.158/"));
        requestDir.Credentials = new NetworkCredential("dvm_user", "dvm");

        try
        {
            FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
            Console.WriteLine("Cool Beans");
        }

        catch(Exception ex)
        {
            Console.WriteLine(ex);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create("ftp://172.29.200.158/");
Run Code Online (Sandbox Code Playgroud)

错误消息:System.Net.WebException:请求的URI对此FTP命令无效.在System.Net.FtpWebRequest.GetResponse()

提前致谢.

c# ftp

4
推荐指数
1
解决办法
1万
查看次数

QFileSystemModel - 增量更新/抢先更新

从Qt文档:

在调用setRootPath()之前,QFileSystemModel不会获取任何文件或目录.这样可以防止在此之前对文件系统进行任何不必要的查询,例如在Windows上列出驱动器.

与QDirModel(已废弃)不同,QFileSystemModel使用单独的线程来填充自身,因此在查询文件系统时不会导致主线程挂起.对模型填充目录之前,对rowCount()的调用将返回0.QFileSystemModel使用文件信息保留缓存.使用QFileSystemWatcher自动保持缓存是最新的.

我正在使用QTreeView和一个使用可检查框的子类QFileSystemModel.
如果我QFileSystemModel::rowCount(index)在树中展开项目之前调用,我将收到"0",无论是否有任何子目录或文件.但是,一旦扩展,再次调用时将给出正确的行计数.

我想如果你调用QFileSystemModel :: setRootPath(),这将从指定的文件路径中获取数据,但在我调用QFileSystemModel::rowCount下面的代码之前,它似乎没有"足够快地执行"(缓存未更新).

// Whenever a checkbox in the TreeView is clicked
bool MyModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
  if (role == Qt::CheckStateRole)
  {
    if (value == Qt::Checked)
    {
      setRootPath(this->filePath(index));
      checklist.insert(index);
      set_children(index);
    }
    else
    {
      checklist.remove(index);
      unchecklist->insert(index);
     }
      emit dataChanged(index, index);
      return true;
   }

  return QFileSystemModel::setData(index, value, role);
}

// Counts how many items/children the node has (i.e. file/folders) 
void MyModel::set_children(const QModelIndex& index)
{
    int row = this->rowCount(index); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qfilesystemmodel

4
推荐指数
1
解决办法
1805
查看次数

返回指针的向量 - 理解

我试图了解以下内容(让我们假装MyStorageClass很大):

class MyStorageClass
{
public:
  string x;
  string y;
  string z;
};

class storage
{
public:
  storage();
  ~storage()
  {
    vector<MyStorageClass *>::iterator it = myVec.begin(); it != myVec.end(); it++)
    {
      delete *it;
    }

  vector<MyStorageClass*> getItems()
  {
    for(int i = 0; i < 10; ++i)
    { 
      v.push_back(new MyStorageClass());
    }
    return v;
  }

private:
  vector<MyStorageClass*> v;

};



main()
{
  storage s;
  vector<MyStorageClass*> vm = s.getItems();
}
Run Code Online (Sandbox Code Playgroud)

从我的描述中,当s返回向量并被赋值给vm它时,作为副本(按值)完成.因此,如果s超出范围并将其称为析构函数,vm则拥有自己的副本,其结构不受影响.但是,通过价值传递效率不高.因此,如果您将其更改为通过引用传递:

vector<MyStorageClass*>& getItems()
{
  for(int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-management

4
推荐指数
1
解决办法
3932
查看次数

SQLite - 为每个字段创建和索引

我正在创建一个应用程序,它将从SQLite数据库中获取数据并将其显示在表中.

我希望在用户进行选择时(通过多个下拉框)实时更新表格.每次用户从下拉框中选择一个选项时,应用程序都必须创建一个新的SELECT查询,并添加,删除或更改新的WHERE子句.该表将显示查询结果,因为从下拉框中选择了一个项目.

我的问题是,为了使获取过程更快,我是否可以索引每个表中的每个字段?我不确定这是否可行.

我不需要担心INSERT,ALTER等性能问题,因为很少会添加新数据.

谢谢

sql sqlite

3
推荐指数
1
解决办法
1060
查看次数

C# - 简单验证 - DialogResult

我在表单上单击按钮时有以下代码:

        private void btnOK_Click(object sender, EventArgs e)
        {

        if (this.txtProjectName.Text == "")
        {
            MessageBox.Show("No project name entered", "No Project Name", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            btnOK.DialogResult = DialogResult.None;
        }
        else
        {
            this.btnOK.DialogResult = DialogResult.OK;
            return;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果文本框中有内容,则表单仅在第二次单击时关闭.有没有办法立即关闭表单,并将DialogResult.OK传递给它的调用者?

谢谢

c#

3
推荐指数
1
解决办法
4197
查看次数

C++/Qt - 编译问题:语法错误:缺少';' 标识符之前 - 不知道

我有以下非常简单的代码:

main.cpp中

#include "ui_library_browser.h"
#include <QtGui/QApplication>
#include "StartWindow.h"
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  StartWindow w;
  w.show();
  return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

StartWindow.h

#ifndef STARTWINDOW_H_
#define STARTWINDOW_H_

#include <qwidget>
#include "MainWindow.h"

class StartWindow : public QWidget
{ 
  Q_OBJECT

public:
  StartWindow();
  ~StartWindow();
  MainWindow main_window;  //<-- Problem
};
#endif
Run Code Online (Sandbox Code Playgroud)

MainWindow.h

#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_

#include <qdialog.h>
#include "StartWindow.h"

class MainWindow : public QDialog
{
  Q_OBJECT

public:
  MainWindow();
  ~MainWindow();
};
#endif
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

moc_MainWindow.cpp

StartWindow.h(14):错误C2146:语法错误:缺少';' 在标识符'main_window'StartWindow.h(14)之前:错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int StartWindow.h(14):错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int

我以前写过一些C++/Qt应用程序,但我对此感到很满意!

提前致谢!

c++ qt

3
推荐指数
1
解决办法
5367
查看次数

从内存中提取double的字节值

我正在尝试从计算机的内存中提取double的字节值.其原因是准确性,因为表示给用户的最终值具有一些舍入.

理想情况下,我希望能够从数字(IEEE 754标准)中提取符号,指数和尾数

根据我的理解,转换为无符号字符是可行的方法.我有以下代码片段(在其他地方被盗),但我不相信结果 - 任何整数值都没有字节输出:

double d = 2;
unsigned char *p = (unsigned char*)&d;
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我正确的方向,以准确提取双数字的字节表示,或提供有关如何进行的任何建议/意见?

c++ double byte

3
推荐指数
1
解决办法
1623
查看次数

迭代通过抽象类的向量

我有以下课程.在Main类中的for循环期间发生错误.编译器抱怨draw函数"是非类型GLCommand".应用程序的想法是存储许多不同类型的GLCommand和Shape相同的载体中.我应该采用不同的设计方法,还是简单解决这个问题?

接口:

class GLCommand
{
    public:
        GLCommand();
        virtual ~GLCommand();
    virtual void draw() = 0;
};
Run Code Online (Sandbox Code Playgroud)

抽象类:

class Shape : public GLCommand
{
public:
  Shape(int);
  virtual ~Shape();
  virtual void draw() {};
private:
  double colour[];
  int sides;

};
Run Code Online (Sandbox Code Playgroud)

派生类:

class Polygon : public Shape
{
  public:
    Polygon(int sides);
    virtual ~Polygon();

    void draw();

private:
  vector<Coordinates *> verticies;

};
Run Code Online (Sandbox Code Playgroud)

主要:

int main()
{
    vector <GLCommand*> vec;
    Polygon p(4);

    vec.push_back(&p);

    for (vector<GLCommand*>::iterator it = vec.begin(); it!=vec.end(); ++it) …
Run Code Online (Sandbox Code Playgroud)

c++ abstract-class stl

2
推荐指数
1
解决办法
1418
查看次数