我正在阅读以下MSKB示例,他们在托管对象上执行删除操作.
我的印象是你永远不应该删除一个带有垃圾的收集对象,而你必须把它留给垃圾收集器.
我错过了什么?
方法4
//#include <msclr/marshal.h>
//using namespace msclr::interop;
marshal_context ^ context = gcnew marshal_context();
const char* str4 = context->marshal_as<const char*>(str);
puts(str4);
delete context;
Run Code Online (Sandbox Code Playgroud) 通过OLE/COM对象查看器查看由CCW创建的生成的TLB文件显示IID保持不变,除非我更改了界面的设计(这是正确的行为),我担心的是如果我在另一台机器上编译相同的代码尽管接口没有改变,因此将生成完全不同的IID,从而破坏现有的COM客户端.
只需打开配置属性>链接器>调试>生成调试信息,我的exe的大小就从2.11MB增加到2.34MB
什么是额外的~230KB用于?我认为exe应该大致相同的大小(给pdb文件提供或采取额外的路径)但不是那么多.这种"膨胀"会不会有任何影响?
我还看到配置属性> C/C++>常规>调试信息格式设置为在发布模式下禁用,而pdb文件设置为生成,这有什么原因吗?从我所知道的exe是相同的大小 - 只是PDB在你启用程序数据库时变得更大,我看不出这个问题,但我想确保没有一些我是缺少考虑程序数据库是发布配置中新项目的默认值.
我正在构建一个哈希键字符串(从地图折叠),其中的值由特殊的ASCII单位分隔符31(1F)分隔.
这很好地解决了试图猜测字符串值中不使用哪些ASCII字符的问题,我不需要担心转义或引用值等.
然而,阅读关于它的历史它似乎是20世纪60年代的遗物,我没有看到很多例子,其中字符串是使用这个特殊字符构建和标记的,所以这一切似乎都太容易了.
在现代应用程序中使用此分隔符是否有任何问题?
我目前正在非Unicode C++应用程序中执行此操作,但是我很想知道这通常适用于其他语言,例如Java,C#和Unicode.
在 MS Visual C++ 2008 中,是否有任何理由在调试版本中禁用增量链接?
从我有限的阅读启用增量构建让我更快地链接和编辑 & 继续。
我不知道你为什么要禁用这个伟大的功能。什么是缺点?是片状的吗?
编辑: 我正在使用一个包含多个项目的解决方案(少数 dll 链接到几个 exe),并且大多数(但不是全部)在调试中禁用了增量链接。
我需要更新Oracle数据库中的一行,这样我就不会在基于Web的应用程序中默默地破坏来自其他客户端的更改.
在我当前的系统中,我执行以下操作:
SELECT * FROM table WHERE id=:ID AND lastmodified=:LASTMOD
Run Code Online (Sandbox Code Playgroud)
如果我们开始时行仍然存在相同的最后修改日期,我们知道没有人改变它,所以我们可以使用上次修改时间进行更新.
然而,当使用两个会话手动执行此操作时,我注意到如果两个客户端在大致相同的时间选择,则可能会错过选择和更新步骤之间的行已更改,因为两者都在同一秒或毫秒内发生.
最终结果是我破坏了其他用户的更改,并且没有发生任何警告.
我正在考虑使用SELECT FROM UPDATE,但显然这是一个坏主意(特别是对于网络应用程序),文章建议重新阅读(这是我上面所做的),但我仍然认为我有竞争条件的风险.
编辑:说清楚我关注时间被引用的方式.
从Assembly开始,此问题在使用自定义解析程序时不允许部分信任的调用者
感谢该问题的解决方案,我现在能够从本地控制台应用程序调用网络共享上的C#库(不更改CasPol)
我现在需要采取下一步,即从另一个与C#Library位于网络上相同文件夹中的混合C++/CLI DLL调用C#库.C++/CLI DLL将由本地控制台应用程序调用.
我在上面使用相同的自定义处理程序(即有证据),当从本地控制台应用程序调用C#库时,它可以正常工作.
从本地控制台应用程序调用C++/CLI库时,出现以下异常:
无法加载文件或程序集"MyCplusplusCLILib,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.无法授予最低权限请求.(HRESULT异常:0x80131417)
如果我完全信任网络位置它可以正常工作但是我不明白为什么我需要授予这种信任时,根据3.5 SP1中的更改,Intranet不再需要FullTrust应用于它(所有库都是为.NET 3.5编译的)在Visual Studio选项中)
我有一个类,它取决于应用程序的状态,用户选项可能并不总是能够存在于任何有意义的状态.
当对象不存在时,最清楚的方法是什么?
到目前为止我想到的两个想法以及为什么我不相信它们不是答案:
我目前正在使用这段代码从我的函数中返回一组行.
--Source: http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html
create or replace type t_col as object (
i number,
n varchar2(30)
);
/
create or replace type t_nested_table as table of t_col;
/
create or replace function return_table return t_nested_table as
v_ret t_nested_table;
begin
v_ret := t_nested_table();
v_ret.extend;
v_ret(v_ret.count) := t_col(1, 'one');
v_ret.extend;
v_ret(v_ret.count) := t_col(2, 'two');
v_ret.extend;
v_ret(v_ret.count) := t_col(3, 'three');
return v_ret;
end return_table;
/
Run Code Online (Sandbox Code Playgroud)
我通过发出SQL来调用它
select * from table(return_table);
Run Code Online (Sandbox Code Playgroud)
无法在包中定义对象类型,我尝试使用有效的记录类型(在PL/SQL中),但我无法以与此相同的方式从中进行选择.
如何使用包内的函数实现此结果?