当您将从 MarshalByRefObject 继承的对象传递给不同的 AppDomain 时,创建该对象的 AppDomain 引发的 GC.Collect() 不会收集该对象,前提是该对象在 GC.Collect( 时未植根于任一 AppDomain 中) )叫?
[当我说没有 root 时,我的意思是开发人员编写的代码不再访问它。]
看来该对象并没有被收集,而是被提升到了下一代!
但是,如果我停止将对象传递给 diff AppDomain,它就会按预期被收集。
这是设计使然吗?如果有的话有什么道理吗?
多谢你们,
PS 我知道代码中的 GC.Collect() 出于多种原因是不好的,我只是想了解 GC 如何在 MBRO 上发生。
参考这里
该析构函数还将隐式调用auto_ptr对象的析构函数.这将删除它所持有的指针,指向C对象 - 不知道C的定义!它出现在.cpp文件中,其中定义了struct A的构造函数.
这很奇怪然后
5.3.5/5状态 - "如果被删除的对象在删除时具有不完整的类类型,并且完整的类具有非平凡的析构函数或释放函数,则行为是未定义的."
我的问题是,为什么不是这样的程序试图删除指向不完整类型的指针被视为格式错误?为什么它被推入条件领域(而完整的类有一个非平凡的析构函数......)'未定义的行为'?
' 和 '意味着什么?
编辑2:
代码是否格式良好?VS和Gcc/CLang编译,但是Comeau发出警告.我想这一切都是标准中提到的未定义行为的一部分.我的问题是"为什么这不是形成错误但是未定义"?
#include <iostream>
#include <memory>
using namespace std;
struct C;
// Is this the POI for auto_ptr<C>? $14.6.4.1/3
struct A{
A();
auto_ptr<C> mc;
~A(){} // how does it link to C::~C at this point?
};
struct C{};
A::A():mc(new C){}
int main(){
A a;
}
Run Code Online (Sandbox Code Playgroud) 我在iPhone开发人员的许多采访中被问到这个问题.我用Google搜索了它,但无法找到满意的答案.问题是
"调用UIViewController函数的顺序是什么?"我知道的一些函数是
我的网站内容有限.我希望我的网站出现在搜索结果中,但我不希望它公开.
有没有办法允许抓取工具抓取我的网站,但阻止他们公开?
我找到的最接近的解决方案是Google First Click Free,但它甚至要求我第一次显示内容.
好的,我需要提供一些属性来描述MVC模型对开发人员的意义.而目前唯一的一个词是模块化(分离).
有趣的是,我需要给出一些形容词,而不是名词.:| 有帮助吗?:)
有谁知道我是否可以使用Google电子表格存储我的自定义HTML表单的结果?
我知道Google电子表格允许在Google域上创建表单,但是可以将Google电子表格用作其他Web应用程序的数据库吗?
我的应用程序的问题是我无法在显示图标下看到我的应用程序名称.我在清单文件中使用以下代码来设置应用程序名称和项目的图标.
<application android:icon="@drawable/icon"
android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)
将这段代码放入我的应用程序后,我可以看到图标,但应用程序名称(应用程序名称)根本没有显示.我甚至检查了string.xml文件中的字符串app_name,我发现它也在那里.
我甚至尝试直接硬核应用程序名称,如下所示,
<application android:icon="@drawable/icon"
android:label="app_name">
Run Code Online (Sandbox Code Playgroud)
但没有用,我看不到我的应用名称.我弄乱了这个问题.任何人都可以建议,这里发生了什么以及显示应用名称需要做些什么,还是有其他方式来显示我的应用名称?对此的任何建议都是可观的.
我使用Twisted来异步访问Python中的数据库.我的代码看起来像这样:
from twisted.enterprise import adbapi
from MySQLdb import _mysql as mysql
...
txn.execute("""
INSERT INTO users_accounts_data_snapshots (accountid, programid, fieldid, value, timestamp, jobid)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s')
""" % (accountid, programid, record, mysql.escape_string(newrecordslist[record]), ended, jobid))
Run Code Online (Sandbox Code Playgroud)
这一直有效,直到我遇到这个字符:®,这导致线程抛出异常: `exceptions.UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 7: ordinal not in range(128)
但是,如果我不使用MySQLdb_mysql.escape_string(),当输入包含引号等(当然)时,我会收到数据库错误.在访问数据库之前发生异常,因此数据库的整理似乎根本不重要.
在不对unicode字符抛出异常的情况下,逃避此内容的最佳方法是什么?理想的解决方案是我可以传递unicode字符,不会干扰查询以及MySQL不受干扰; 然而,剥离unicode字符串,用问号替换它们,修改它们或其他任何可以阻止崩溃的东西都是可以接受的.
我有一个包装NSMutableSet对象的类,我有一个实例方法,可以将对象(使用addObject:方法)添加到NSMutableSet.
这很好用,但我正在嗅到性能障碍,因为containsObject:在将对象添加到集合之前我明确调用的方法内部.
三部分问题:
containsObject:对象添加对象之前是否需要进行调用?containsObject或者containsObjectIdenticalTo:?contains在什么方法下调用addObject:?这对我很重要,因为如果我将一个对象传递给containsObject:它将返回true,但如果我将它传递给containsObjectIdenticalTo:它将返回false.我已经创建了一个TCP服务器.我面临一个问题.我的TCP服务器没有收到大于30000字节的数据.
这是接收数据的代码
MAX_TCP_DATA = 64000
private void Process()
{
if (client.Connected == true)
{
log.InfoFormat("Client connected :: {0}", client.Client.RemoteEndPoint);
Byte[] bytes = new Byte[MAX_TCP_DATA];
String data = null;
NetworkStream stream = client.GetStream();
int i;
try
{
// Loop to receive all the data sent by the client.
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
// bytes contains received data in byte[].
// Translate data bytes to a UTF-8 string.
byte[] receivedBuffer = new byte[i];
Array.Copy(bytes, receivedBuffer, i);
if …Run Code Online (Sandbox Code Playgroud) c# ×2
android ×1
appdomain ×1
c++ ×1
destructor ×1
foundation ×1
iphone ×1
label ×1
mysql ×1
objective-c ×1
python ×1
robots.txt ×1
seo ×1
sockets ×1
tcp ×1
twisted ×1
web-crawler ×1