小编Tim*_*sch的帖子

有没有办法使用普通ADO从SQL Server检索视图定义?

我使用ADO Connection OpenSchema()调用以各种方式成功从SQL服务器上托管的数据库中提取列定义,因此我可以在另一个SQL数据库中以编程方式重新创建这些表.到现在为止还挺好.

使用多个视图进行与上表的主要交互; 虽然OpenSchema()能够以与返回表的列定义相同的方式返回视图的列定义,但缺少一小部分信息 - 视图中的列映射到的基础表中的哪个表和列.

我尝试使用ADOX目录视图访问用于创建视图的SQL命令,但似乎我们使用的SQL Server的OLEDB驱动程序不支持此功能.

有没有办法通过ADO获取视图配置的这些信息,或者以"ColumnX映射到表Z中的ColumnY"的方式或以用于创建视图的实际SQL命令的形式?

sql-server ado view

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

C++ std :: shared_ptr用法和信息

我想std::shared_ptr在我的代码中使用.我已经看到有关于这个问题的其他问题,但我仍然遇到编译器错误.我有正确版本的gcc和设置吗?

我做了什么:

我曾试图单独编译我既头码- <memory><tr1/memory>,但仍然在这两种情况下得到下面的错误.

我正在使用的gcc版本是

gcc --version
gcc (GCC) 4.3.2
Run Code Online (Sandbox Code Playgroud)

当我包含<memory>标题我使用std::shared_ptr和我使用的<tr1/memory>标题std::tr1::shared_ptr?它是否正确?

我已经设置了shared_ptr,如下所示:

std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

src/WH.cxx:156: error: 'shared_ptr' is not a member of 'std'
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

当我尝试<tr1/memory>标题时

src/WH.cxx:156: error: 'std::tr1' has not been declared
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

看起来我没有正确包含一些东西.有任何想法吗?

我知道boost库有,shared_ptr但这些库目前不适合我.

编辑:只是添加,我的编译器选项如下:g ++ -O3 -g3 -m32 -fPIC …

c++ g++ shared-ptr

18
推荐指数
3
解决办法
3万
查看次数

如何在不丢失历史记录的情况下将大型Perforce存储库导出到不同的版本控制系统?

在工作中,我们有一个庞大的Perforce存储库(大约40k更改列表,总存储大小~145GB).我们对Perforce只有一些温和的抱怨感到满意,但我们计划采用更加分散的开发模式,因此,我们也希望转向更加分散的版本控制系统.

到目前为止,我已经看过通常的嫌疑人(git,mercurial和潜在的集市,因为我对它有很好的经验),但我们目前的主要障碍是从Perforce获取版本历史并导入各种DVCS,所以我们不要失去了历史.如果我们不一定要保留它,我们也不希望Perforce服务器徘徊 - 我这种迁移的经验是,一段时间后没有人看过旧的回购,所以你会失去历史那样.

由于有多个项目资源库中的想法是,当我们出口的历史,不是每个人都需要能够看到历史的每一个零件,将它拆分成多个DVCS项目.然而,我们最大的项目仍然包含大约2/3的承诺修订版,并且还占用了大约2/3的存储空间.它拥有最多的分支机构 - 大约30个.

到目前为止,我已经尝试了以下内容 - 一切都在Windows上,因为我们只是一个Windows专卖店:

  • 使用hg convert扩展名导入Mercurial .这似乎对我正在转换的项目的主要分支非常有效,但是尝试使用分支图将Perforce分支转换为命名的Mercurial分支仍然会在默认分支上的每个签入时生成平面导入.也许那是因为我设置了分支映射错误,但hg help convert建议你只能将Perforce repo变成一个"扁平"结构而没有使用这个导入器的分支,这对我们的使用来说还不够好.
  • 使用git-p4.py导入Git.Perforce文档使用git作为Perforce的分布式前端,并且基于repo的最新版本的关闭确实产生了一个可用的git repo.尝试使用分支导入整个子项目会导致导入器耗尽内存,所以我甚至无法判断它是否设法正确导入我们的仓库.
  • 然后我有了这个辉煌的大脑放屁,将Perforce repo导入SVN,所有分支都映射到适当的SVN分支,因为太阳下的每个版本控制系统都可以从SVN导入.这只是使用SVN作为转换的中间步骤,而不是目标VCS - 否则我们不会从这个转换中获得任何东西.使用p42svn.pl,这个过程很早就破坏了,因为我们的Perforce服务器似乎不喜欢被似乎为每个文件/修订版建立新连接的脚本所打击.
  • 我还没有考虑将历史输出到Bazaar,因为它有点像跑步.

所以,我的问题是:

  • 除了p42svn.pl之外还有一个很好的工具可以将Perforce repo导出到SVN吗?我不介意使用SVN作为中间回购,因为它似乎导致导出到我们看起来相当容易的所有DVCS.
  • 有没有人成功地将Perforce的分支机构导出到Mercurial的分支机构中,如果是这样,你是怎么做到的?关于转换扩展的文档似乎有点稀疏,我似乎无法找到一个好的/工作方式来做到这一点.

svn git mercurial perforce

7
推荐指数
1
解决办法
5095
查看次数

如何使用LD_PRELOAD检查是否已预加载Linux共享库

我很熟悉使用dlopen()先前调用来检查共享库是否已加载到进程中dlopen()而不会触发加载(如果不存在),如下所示:

 void* lib = dlopen(lib_name, RTLD_NOLOAD);
 if (lib != NULL) {
   ...
 }
Run Code Online (Sandbox Code Playgroud)

我最近尝试应用相同的模式来确定是否已使用LD_PRELOAD将少数共享库中的一个加载到进程空间中.然而在所有的情况下,上述呼吁dlopen()的回报NULL.

所以基本上,如果我使用这个命令行启动进程

LD_PRELOAD=libawesome.so ./mycoolprocess
Run Code Online (Sandbox Code Playgroud)

然后在mycoolprocess.c中的代码中运行以下检查

void* has_awesome = dlopen("libawesome.so", RTLD_NOLOAD);
if (has_awesome != NULL) {
  printf("libawesome is available\n");
}
Run Code Online (Sandbox Code Playgroud)

无论是否使用LD_PRELOAD加载了共享库,对dlopen()always 的调用都会返回NULL.根据Andrew Henle在下面的评论,我也尝试dlopen使用其中一个重新加载的共享对象的绝对路径进行调用,但dlopen在这种情况下,尽管共享对象已预加载,仍会返回NULL.

所以我的问题是双重的:

  1. 上述模式是否适用于使用LD_PRELOAD加载的库?
  2. 是否有另一种方法让进程确定是否已预加载特定的共享库?

c linux shared-libraries ld-preload

7
推荐指数
1
解决办法
2580
查看次数

在匿名命名空间内/外的Typedef?

在.cpp文件中,是否有任何差异/偏好?

// file scope outside any namespace
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;
Run Code Online (Sandbox Code Playgroud)

V/S

namespace { // anonymous
  using X::SomeClass;
  typedef SomeClass::Buffer MyBuf;
}
Run Code Online (Sandbox Code Playgroud)

c++ typedef namespaces using directive

6
推荐指数
2
解决办法
3176
查看次数

libcrypto在Mac OS X 10.7上被弃用(Lion)

我刚刚在Lion上使用libcrypto,看起来整个api已经被弃用了.该手册页尚未自10.6.6更新.

有谁知道在Lion上替换libcrypto是什么?

macos osx-lion

6
推荐指数
2
解决办法
6615
查看次数

关于如何提高Java String到byte []转换性能的任何建议?

我继承了一段代码,它们大量使用String - > byte []转换,反之亦然,对于一些自行开发的序列化代码.本质上,Java对象知道如何将它们的组成部分转换为字符串,然后转换为字节[].然后,所述字节数组通过JNI传递给C++代码,该代码将byte []重构为C++ std :: strings,并使用它们来引导镜像Java对象的C++对象.还有一点,但这是对这段代码如何工作的高级视图; 通信在这两个方向上都是这样的,这样C++ - > Java转换就是我上面提到的Java - > C++转换的镜像.

这段代码的一部分 - 将字符串实际转换为字节[] - 在分析器中意外地显示为刻录了大量CPU.当然,有很多数据正在转移,但这是一个意想不到的瓶颈.

代码的基本概要如下:

public void convertToByteArray(String convert_me, ByteArrayOutputStream stream)
{
  stream.write(convert_me.getBytes());
}
Run Code Online (Sandbox Code Playgroud)

功能还有一点但不多.对于每个String/Stringified对象调用上述函数一次,并且在将所有成分写入ByteArrayOutputStream之后,ByteArrayOutputStream将转换为byte [].通过提取convert_me.getBytes()调用将上述内容分解为更适合剖析器的版本,可以看出此函数中90%以上的时间都花在了getBytes()调用上.

有没有办法改善getBytes()调用的性能,还是有另一种可能更快的方法来实现相同的转换?

正在转换的对象数量非常大.在仅使用生产数据的一小部分的分析运行中,我看到了1000万以上的调用上述转换函数.

由于我们非常接近将项目投入生产,因此目前还有一些不可行的解决方法:

  • 重写序列化接口只是在JNI层上传递String对象.这是改善情况的明显(对我而言)方式,但它需要对序列化层进行重大再造.鉴于本周早些时候我们将进入UAT,现在进行这种复杂的改变已经为时已晚.这是我下一个版本的顶级待办事项,所以它将完成; 然而,我确实需要一个解决方法,直到那时,但到目前为止代码工作,已经使用了多年,并且已经解决了大部分问题.好吧,除了表现.
  • 更改JVM(当前为1.5)也不是一种选择.不幸的是,这是安装在客户端计算机上的默认JVM,并且很可能无法更新到1.6(在这种情况下可能会或可能不会更快).任何在大型组织工作的人都可能理解为什么......
  • 除此之外,我们已经遇到内存限制,因此尝试至少缓存较大的字符串及其字节数组表示,同时作为一种可能优雅的解决方案,可能会导致更多问题而不是解决

java performance java-native-interface

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

如何根据文件的时间戳创建自定义MSBuild Target的执行?

我正在研究的C++项目(我从VS2008转换为VS2010)过去常常使用几个vcbuild .rules文件来指定自定义构建规则.这些.rules文件具有CustomBuildRule节点的特定"AdditionalDependencies"属性,该属性指定了在计算目标是否需要重建时应该考虑的文件列表.在VS2010转换期间,这些"AdditionalDependencies"被忠实地转移到相应的.props文件中.

与自定义生成规则关联的.targets文件会将这些添加AdditionalDependencies到节点的Inputs属性中Target.这可确保在依赖项中列出的任何文件不存在的情况下执行目标,但如果其中一个依赖项比目标的输出更新,则不会执行目标.它在逻辑上也不太正确,因为并非所有文件都是实际输入,其中一些是指在目标构建期间可能使用的可执行文件.因此,它们可能会被检入版本控制并且将存在,但是文件的较新版本需要触发受影响目标的重建.

目标节点的MSDN文档显示了一个Condition属性,该属性应该可以满足我的要求,但此属性支持的条件不会超出已经执行的"存在"测试.

是否存在可以使用的条件,它将比较两个文件的时间戳(或理想情况下,当前列出的文件AdditionalDependencies与Target的输出文件的时间戳),从而允许我触发类似make的"重建此目标,如果它是过时的这些依赖"?

c++ msbuild visual-studio-2010

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

MSBuild有一个类似于lint的工具吗?

我刚刚学习了Visual Studio 2010和MSBuild在它们将成功执行哪些vcxproj MSBuild文件时非常宽松的方法 - 它们将忽略子任务和单个文件的缺失配置,并且仍然成功执行构建任务.然而,这给我带来了问题,因为它导致跨多个配置的不一致构建,加上由于项目文件中的内部不一致,我不一定在Visual Studio的属性视图中编辑它们.

到目前为止,我已经设法通过手动编辑vcxproj文件来摆脱最有问题的不一致性,但鉴于此特定解决方案包含超过80个项目文件,这不是一个真正可接受的策略.

是否有一个工具可以检查MSBuild文件的内部一致性并突出显示缺少的配置,"你的项目文件说它提供配置X,Y和Z但文件X的自定义构建任务只支持配置X和Z"?

更新:我试图解决具体的问题,现在,而不是掉毛的vcxproj文件的更普遍的问题是,对于某些配置缺失条件句.不幸的是,添加和更新条件似乎需要比使用查找和替换工具安全完成的更多.以编程方式正确地执行它很可能需要DOM操作,并且鉴于我对构建文件的内部结构非常熟悉,到目前为止,使用能够进行基本结构XML验证的文本编辑器似乎是最快的方法.手头的任务.

然而,我真正希望看到的是一种工具,它至少可以自动突出显示这些问题,以减少跟踪它们所花费的时间.

msbuild visual-studio-2010 msbuild-4.0

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

类定义之外的部分模板特化

我可以在类声明中使用部分模板特化

template<class T1, class T2>
struct A
{
    void foo() { cout << "general"; }
};

template<class T1>
struct A<T1, int>
{
    void foo() { cout << "partial specialization"; }
};
Run Code Online (Sandbox Code Playgroud)

但是当我试图在类声明之外做这件事时

template<class T1, class T2>
struct A
{
    void foo();
};


template<class T1, class T2>
void A<T1, T2>::foo() { cout << "general"; }

template<class T1>
void A<T1, int>::foo() { cout << "partial specialization"; }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

不完整类型 «struct A < T1, int >» 的无效使用

当您想重新定义所有成员时,使用第一种方法不是问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?

那么,是否可以在类定义之外使用部分模板特化?

c++ templates

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

什么是 (__ASSERT_VOID_CAST (0))?

从 C 中的 assert.h 文件:

#define assert(expr)        (__ASSERT_VOID_CAST (0))
Run Code Online (Sandbox Code Playgroud)

我想知道什么是 (__ASSERT_VOID_CAST (0))?我试图找到它的实现,但找不到任何地方。

c macros

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

线程同步 - 微妙的问题

让我有这个循环:

static a;
for (static int i=0; i<10; i++)
{
   a++;
   ///// point A
}
Run Code Online (Sandbox Code Playgroud)

到这个循环2个线程进入......

我不确定什么......如果thread1进入POINT A会发生什么,保持在那里,而THREAD2进入循环10次,但是在将第10个循环增加到10之后,在检查之前我是值,如果它小于10,则Thread1退出循环并假设增加i并再次进入循环.Thread1将增加的价值是什么(我将会看到)?它会是10还是0?

是否可以认为Thread1会将i增加到1,然后线程2将再次循环9次(并且它们可能是8,7等等......)

谢谢

c++ multithreading synchronization thread-safety

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